CHANGELOG
----------------------

[2015-08-18]

[2015-07-21]
 * perltidy
 * Perltidy

[2015-06-17]
 * Remove 'NOT REACHED' comments

[2014-11-30]

[2014-11-07]
 * Reformat using new perltidy settings

[2014-06-04]
 * Ignore files generated by tagging programs
 * Allow wait-time for emails to be configurable
 * Improve array iteration performance

[2014-01-18]
 * Regen
 * Update email address

[2014-01-15]
 * Set return value as appropriate in validation routines
 * Document what BEGIN block does

[2013-12-21]
 * Document Email Address Validation
 * Comment methods with early return of control

[2013-12-20]
 * Close out CAVEAT task
 * Minor punctuation nit
 * Add CAVEATS section about Email Validation modules
 * Be sure to clear out $@ in BEGIN loop
 * Update TODO items to reflect Email work
 * Add support for Email::Valid
 * Remove Mail::RFC822::Address checks
 * Give validation methods object oriented goodness
 * Dynamically load Mail::RFC822::Address module
 * Add TODO item for flexible usage of Mail::RFC822::Address

[2013-09-19]
 * Bump version to 0.64

[2013-09-17]

[2013-09-16]
 * Correct potential race condition when closing file handle
 * Close out leftover file task
 * Add TODO about file spewage

[2013-09-12]
 * Optimize fileHandle() method

[2013-04-30]
 * Clean up some commentary

[2013-04-16]
 * Close temporary filehandle before checking for assoc. file
 * Close out TEMP environment variable task
 * Use the TEMP environmental variable to get temporary file path
 * Add TODO to use TEMP Environmental variable
 * Bump version to 0.63

[2013-04-15]

[2013-04-12]
 * Properly call mail(1) when using Debian GNU/Linux
 * Properly call mail(1) when using OpenBSD

[2013-02-10]
 * Remove redundant ABSTRACT_FROM
 * Correct bullet in item line

[2013-02-09]
 * Use preferred representation for mail body time stamp
 * Log::Fine now requires Perl v5.8.3
 * Minor verbiage to avoid potential confusion

[2013-02-08]
 * Use File::Temp::mkstemp() to create temporary file

[2013-01-13]
 * Use File::Temp::mkstemp() to create temporary file
 * Switch to using tmpnam() from File::Temp

[2013-01-03]
 * Bump version to 0.62
 * Remove Revision ID Information
 * Revert "Remove Sys::Syslog as a requirement"

[2012-12-29]
 * Bump version to 0.61
 * Make tests compatible with Email::Sender version >= 0.120000
 * Remove Try::Tiny from recommendations
 * Use try_to_sendmail() method for Email delivery

[2012-10-17]

[2012-08-25]
 * Switch from using "~" to delimit fixed-width text to "="
 * Initial revision of quick-n-dirty ChangeLog generation script

[2012-07-16]
 * Close out tasks

[2012-07-04]

[2012-07-03]
 * Do not forget to bump copyright year in necessary files
 * Document {err_callback}
 * Add unit tests for {err_callback} functionality

[2012-06-29]
 * Add callback functionality for _error()
 * Call _error() if we are unable to close the file handle
 * Code and comment clean-ups
 * Close out Sys::Syslog and MIME::Lite tasks
 * Capture potentially fatal errors
 * Add the following TODO items:
 * Do not call Sys::Syslog::closelog() on destruction
 * Be consistent with file handle validation
 * Make sure Log() has a valid logging object
 * Make testing messages consistent
 * Reference Sys::Syslog macros explicitly
 * Cancel internal logging method
 * Remove Sys::Syslog as a requirement
 * Reference VALTOLVL_MAP values from LVLTOVAL_MAP
 * Update misleading DESCRIPTION
 * Add and close null handle creation task
 * Cancel enable/disable task
 * Initial entry of Null Handle
 * Correct bug reporting email address
 * _error() if we are unable to close file handle
 * Close out TODO items
 * Add additional sanity checks
 * registerHandle() can now accept array refs
 * Add new method _error()
 * Remove requirement for Test::Output
 * Update TODO list for LOGFINE-0-61
 * Remove older closed TODO items
 * Brainstorm ideas for v0.61
 * Use the mailx(1) command for grabbing headers under solaris
 * Recommend Try::Tiny v0.11
 * Set object's {_err_str} when _fatal() is called
 * Clean up msgWrite() logic
 * Add blib and pm_to_blib to list of ignored items
 * {header_to} option can now be either a string or an array ref
 * Add new subclassing TODO item

[2011-12-24]

[2011-12-15]
 * Bump version
 * Only save STDERR on newer versions of perl

[2011-12-08]
 * Update skip message to reflect reality
 * getgrgid() works under cygwin
 * Correct instance of vivification
 * Save and restore original STDERR
 * Make sure the Log::Fine::Handle::File filehandle is closed

[2011-12-02]
 * Use $ENV{GID} and $ENV{EGID} under cygwin
 * Check for absolute path under MSWin32
 * Reduce spewage by checking $ENV{EGID} and $ENV{GID}
 * Oversight
 * Bump version
 * Regen

[2011-12-01]
 * Sync documentation w/ reality
 * Replace croak with confess when calling ->_fatal()
 * Close out template tasks
 * Clean up function, variable names
 * Redirect stderr to the bitbucket for bad custom template unit test
 * Add rename method task
 * Update custom placeholder tasks
 * Check for duplicate custom placeholders
 * Add another TODO item for storing placeholder keys
 * Add key collision TODO

[2011-11-28]
 * Just use {file} if {dir} is not defined

[2011-11-22]
 * Bump copyright
 * Log::Fine::Handle::File can now accept a file name with absolute path
 * perltidy
 * Stress test custom placeholder functionality
 * Correct copyright
 * Be more consistent with variable names

[2011-11-16]
 * Close out custom template TODO
 * Update documentation
 * s/custom_templates/custom_placeholders/
 * Add support for custom placeholders
 * Function refs must be set sans ()
 * Lose redundant code block

[2011-11-03]
 * Fill out details
 * Brainstorm custom template macros
 * Post-pend function names with ()

[2011-11-02]
 * Bump Copyright

[2011-10-31]

[2011-10-30]
 * Bump version
 * Regen

[2011-10-28]
 * Make note that envelope is optional
 * Note perl 5.8.3 requirement

[2011-10-25]
 * Make sure Handle object supports bitmaskListEnabled()
 * Update log mask TODO item
 * Add new method, Log::Fine::Handle->bitmaskListEnabled()
 * Add TODO item about bitmaskListEnabled()
 * Bump copyright
 * Complete Timestamp TODO
 * Log::Fine::Handle::File::Timestamp now properly rotates files
 * Add TODO item about timestamped files

[2011-10-24]
 * Bump version
 * Skip tests if run under MSWin32 or Cygwin
 * Skip tests if run under MSWin32 or Cygwin
 * Skip tests if run under MSWin32 or Cygwin
 * Recommend Throwable
 * Add new handle, Log::Fine::Handle::Email
 * Sync SYNOPSIS with reality
 * Move isLoggable() regression tests to Log::Fine::Level::* tests

[2011-10-19]
 * Add RCS-style keyword

[2011-09-29]

[2011-08-04]
 * Optimize methods for speed

[2011-07-22]
 * Bump version
 * Bump version

[2011-07-12]
 * When getting the group IDs, be sure to use the FIRST value returned
 * Grammar

[2011-07-06]

[2011-05-18]
 * Use ref to determine object type

[2011-03-28]
 * Bump version
 * Auditing for documentation correctness
 * Update tasks
 * perltidy
 * Switch to Test::More

[2011-03-19]
 * Add POD readme branch TODO
 * Add TODO for unit tests
 * Provide name() example usage
 * Initial entry of README.pod

[2011-03-18]
 * Bump version
 * Add unit tests for non-default syslog facilities
 * Cancel todo
 * Log::Fine::_fatal() will croak if called directly
 * Close out name() task
 * Test $obj->name()
 * Add more unit tests
 * perltidy
 * Update with LOG-UTIL-LOGTRACKING changes
 * Remove GetLogName()
 * Implement Log::Fine::Utils::CurrentLogger()
 * Add {no_croak} option to list of parameters accepted by OpenLog()

[2011-03-11]
 * Store pointer to current logger
 * Further brainstorming
 * Implement Log::Fine->name()
 * Brainstorming
 * Documentation consistency nit
 * Elaborate GetLogName() TODO
 * Add TODO for GetLogName()
 * Properly match date string when LC_TIME is set to de_DE.utf8

[2011-02-25]
 * Document GetLogName()
 * Add tests for GetLogName()
 * Add new function, GetLogName()
 * Comment out unused Data::Dumper module

[2011-02-08]

[2011-02-07]
 * Bump version
 * Log::Fine::Utils now supports multiple loggers
 * Bump version

[2011-02-06]
 * Expand RCS keywords in Makefile.PL

[2011-02-05]

[2011-02-02]
 * Just require Sys::Syslog 0.13
 * No longer need META.yml since it's auto-generated for us
 * Let Makefile.PL generate an appropriate META.yml file

[2011-01-30]
 * Regen
 * Add installation instructions

[2011-01-11]
 * Minor formatting tweaks

[2011-01-10]
 * Bump version
 * Close out multi-logger task

[2011-01-09]
 * Update
 * Regen
 * perltidy
 * Code optimizations

[2011-01-08]
 * Document new multi-logger functionality
 * Make POD documentation more consistent with perlmodstyle(1)
 * Clean up code
 * Store copy of Log::Fine object

[2011-01-07]
 * Make sure filehandle is open
 * Update TODO with Utils task information
 * Initial stab at having Utils support multiple loggers

[2011-01-06]
 * Add support for listing defined logger objects
 * Brainstorm additional ideas
 * Ignore files generated by perltidy and 'make clean'
 * Add support for variable-precision high-resolution timestamps
 * Properly handle space at beginning of line caused by certain locales
 * Bump Version
 * Bump Version

[2011-01-03]
 * Bump Version

[2011-01-02]
 * Happy New Years!  Bump copyright year as appropriate
 * Correct invocation to _fatal()
 * Add some thoughts on extending Utils
 * Clarify _fatal() documentation

[2010-12-31]
 * Spacing
 * Use _fatal() for croaking

[2010-12-28]
 * Bump version
 * Decided against switching to Module::Build so cancel TODO
 * Close out Formatter template class TODO
 * Optimize how $skip is set
 * Do not call $self->_placeHolders($tmpl) unless we need to
 * perltidy
 * s/{_used_placeholders}/{_placeholders}/g
 * Relocate placeholder generation to separate getter/setter

[2010-12-21]

[2010-12-16]
 * Minor: consistency nit
 * Merge branches 'master' and 'master' of https://github.com/cfuhrman/log-fine

[2010-12-15]
 * Refresh
 * Stop the unit test from lying to syslog

[2010-12-12]

[2010-12-11]
 * Bump version
 * Correct instance where incorrect stack frame was logged
 * Correct instance where incorrect stack frame was logged
 * When subroutine name cannot be determined, assume main()
 * Add additional tests
 * Add debuggery in case I need it
 * When subroutine name cannot be determined, assume main()
 * Add additional tests
 * Correct incorrect stack frame logging issue
 * Correct incorrect stack frame logging issue

[2010-12-07]
 * Comment verbiage
 * Further Optimizations

[2010-12-04]

[2010-12-03]
 * First attempt to optimize Template.pm
 * Update

[2010-12-02]
 * Bump version
 * Close out stress test script TODO

[2010-12-01]
 * Add note about support for log format templates
 * Ship stresslog.pl
 * Expand *.pl files
 * Initial entry
 * Add format() example

[2010-11-28]
 * Add MICROSOFT WINDOWS CAVEATS section
 * Closed out formatter tests TODO
 * Place L::F::F::Template tests into separate file
 * Add TODO about breaking up 04-formatter.t tests
 * Overcome MSWin32 strftime(3) deficiencies
 * MSWin32 does not support getgrgid() or getpwuid()

[2010-11-27]
 * Update
 * Match documentation w/ reality
 * Verbiage
 * Bump version

[2010-11-26]
 * Regen
 * Final TODO item about speed
 * Add note about speed
 * %%millis%% placeholder is now case-insensitive
 * s/_fullhost/_fullHost/

[2010-11-25]
 * Reference getter/setters as methods
 * Close out some TODO elements
 * Update with TODO items
 * Test combination string and lower-case placeholders
 * More notes
 * Make POD documentation more assertive
 * Brainstorming
 * Correct SYNOPSIS
 * Oops!  Add support for filename and line number
 * Update POD documentation
 * Update with new Template class
 * Update
 * Initial entry

[2010-11-24]

[2010-11-23]
 * Regen
 * Add Login and Group
 * Initial ideas for template options
 * Update TODO entries
 * Switch TODO file to use org-mode
 * Add $VERSION
 * Add CONTRIBUTING section
 * Add note about template class
 * Bump version
 * perltidy
 * Make sure user can define one and _only_ one L::F::H::S object
 * Revert "Do not call closelog() if this is perl 5.8.9"
 * Revert "Add CAVEATS"
 * Revert "Clarify CAVEATS"
 * Bump version
 * Clarify CAVEATS
 * Add CAVEATS
 * Do not call closelog() if this is perl 5.8.9
 * Use different ident when testing multiple handles

[2010-11-21]
 * Bump version
 * Lose RCS-style keywords
 * Log failed line
 * Revert "Add rcs-keyword attribute to TODO"
 * Add rcs-keyword attribute to TODO
 * Initial entry
 * Remind myself to tell the world about git
 * Bump version

[2010-11-17]
 * Use a facility that is supported by older versions of perl

[2010-10-02]
 * Bump version
 * Correct typo
 * Add README
 * regen
 * Revert "Remove Revision Information"
 * Revert "Remove Revision Information"
 * Initial entry
 * Commenting & Documentation clean-up

[2010-09-21]

[2010-08-30]
 * Add missing perl modules to test
 * Add missing Log::Fine modules
 * Remove redundant check
 * Add some anti-test-report logic
 * Tell Emacs what to do with itself
 * Explicitly require Sys::Syslog 0.13

[2010-08-29]

[2010-08-28]
 * _fatal() has been documented

[2010-07-05]
 * Refresh
 * Remove Revision Information
 * Remove Revision Information
 * Bump version

[2010-05-10]
 * Clean up comments where appropriate

[2010-05-09]
 * Optimize code where appropriate
 * Mollify Perl::Critic

[2010-05-08]
 * perltidy
 * Add support for {autoclose}
 * Document constructor arguments
 * Explicitly set {autoflush} to 0 unless it is already defined.
 * Sync
 * More verbiage
 * Verbiage
 * Minor cleanups

[2010-04-19]
 * Document _fatal()

[2010-04-09]
 * Improve documentation where applicable

[2010-04-05]
 * use, don't require Log::Fine::Logger
 * Commenting
 * Replace getter/setter functions with single function
 * Set svn:ignore on sub-directories

[2010-03-15]

[2010-03-12]
 * Bump version

[2010-03-10]
 * Revert -r221
 * Test multiple locales

[2010-03-06]
 * Modify regex to handle non-English month representations found in other locales.  This commit addresses the following CPAN Reports:
 * Initial shot at supporting Chinese
 * Branch to address the following:

[2010-03-03]
 * Remind myself to tag new release based on $Log::Fine::VERSION
 * Bump version and update Changes

[2010-01-03]
 * Add new formatter, Syslog
 * Refer to LOG_TIMESTAMP_FORMAT* via object

[2010-01-01]
 * Add README for changes found in v0.30
 * Style changes
 * _formatTime() replaces _getFmtTime()
 * Update documentation to match reality
 * Add 0.30 Changes
 * Regen based on r200 of Fine.pm
 * Happy New Years!  Bump copyright year as appropriate
 * Bump version
 * Add support for configurable levelmaps when using Utils.pm
 * Use a single private getter/setter, _logger
 * perltidy before merge to trunk
 * Revert -r150:148

[2009-12-31]
 * Make sure methods are declared in alphabetical order.
 * Update
 * Use bullet points as appropriate
 * Update documentation
 * Replace getSkip() with skip()
 * Replace getFileHandle() with fileHandle()
 * Replace setFormatter() with formatter()
 * Replace setTimestamp() and getTimestamp() with timeStamp().

[2009-12-30]
 * Add support for java.util.logging levels
 * Add Levels classes and associated unit tests to manifest
 * perltidy
 * Add some negative tests
 * Add some fine-grained validity checking to Logger.  Also, clean up error message in Formatter.pm
 * We skip 2 tests, not 3 if Test::Output isn't installed
 * Test Error handling
 * Add secret option "no_croak".  I need to document this.
 * Use Test::Output for trapping error messages
 * Elaborate on error messages
 * Add new method, Log::Fine::_fatal() for handling error situations. Note that this can be overridden.

[2009-12-15]
 * Optimize logLevels()
 * logMasks() now returns masks in ascending order by mask value
 * Branch for development of better error handling
 * Fix Utils.pm which now passes unit tests.  While here, do some other touch-ups.
 * perltidy
 * Port comprehensive testing from ^/branches/LOGCONFIG branch

[2009-09-29]

[2009-09-28]
 * Switch to new API (s/getLogger/logger/g)
 * Make Log::Fine::Levels compatible.

[2009-09-22]
 * Add support for new Log::Fine::Levels to Log::Fine::Handle.  While here:

[2009-09-17]
 * Add new method, bitmaskAll() for returning a mask with all possible values enabled
 * Make the following changes to Log::Fine:
 * Add Log::Fine::Levels* to tests

[2009-09-16]
 * Remove support for clone, which isn't really needed
 * Mention that this class is the default for Log::Fine::Levels
 * Possible TODO: Tutorial for extending Levels class
 * Fill in SYNOPSIS and DESCRIPTION of pod documentation

[2009-09-09]

[2009-09-08]
 * Fill in POD documentation for Syslog module

[2009-09-03]
 * Log::Fine::Levels::Syslog will now export log levels and log masks via Exporter/AutoLoader
 * Fix tyop
 * Set levels when initializing any Log::Fine based class.  Use new Levels class where applicable.  Add new API, getLevels, for getting the stored Levels object

[2009-08-17]
 * Correctly match revision number.  Also fix spacing
 * Use subversion revision for version number
 * Initial entry of Levels class and associated Syslog class Also added unit test
 * Directory for holding level definitions
 * Branch for development of configurable log levels

[2009-02-06]
 * Add ideas about levels and callback.

[2009-02-05]
 * Add 10-hires test to manifest.
 * Optmize high-resolution time calculation

[2009-02-04]
 * Minor formatting change
 * Remind myself to regenerate README when making a release.
 * Update to latest wish list
 * regen
 * Bump version and copyright date in Fine.pm
 * Bump copyright date
 * Update documentation to include information about high-resolution timestamps.

[2008-12-13]
 * perltidy
 * Add support for fine-grained logging via the Time::HiRes module.  Also add associated test to make sure things work okay.

[2008-12-12]
 * Update date
 * Oops.  Forgot to include Carp!
 * Add error checking to Log() and OpenLog().  Also include CAVEATS section.

[2008-12-09]

[2008-12-08]
 * Mention Log::Fine::Utils.

[2008-08-26]
 * Fix tyop
 * Bump version to 0.21
 * perltidy
 * Add new module, Log::Fine::Utils which provides a functional interface to Log::Fine.  Also add associated test file and update manifest.

[2008-07-23]
 * Don't forget to test Log::Fine::Handle::File::Timestamp.  Reorder testing of modules while we're here.
 * Add item for loadable log levels

[2008-07-05]
 * Avoid redundant testing
 * Be more intelligent about testing mask combinations.  Not completely comprehesive, but getting there.

[2008-07-04]
 * Maybe switch to Module::Build?
 * We can just use Test::Simple for handle tests
 * Bump version
 * Make sure we only use Sys::Syslog when we need to
 * Updated to include bitmask testing
 * Welcome to 0.20
 * Implemented
 * Add test to make sure we don't log when we're not supposed to.  This brings the total number of tests for this file to 132.
 * Handles do not need {level} attribute anymore.  Remove from tests while we're at it.
 * Properly test mask combinations

[2008-07-02]
 * Update for version 0.15
 * Welcome to version 0.15
 * Add TODO and include in Manifest
 * Do bitmasking properly.

[2008-06-30]

[2008-06-07]
 * Optimize how we grab the class name in _init()

[2008-06-06]
 * Update changelog

[2008-06-03]
 * regen
 * Welcome to 0.14
 * Set continuation indentation to 4 per http://www.openbsd.org/cgi-bin/man.cgi?query=style&apropos=0&sektion=0&manpath=OpenBSD+4.3&arch=i386&format=html
 * Grammar fix ;)

[2008-05-27]

[2008-05-26]
 * Welcome to 0.13!
 * Addition of Checklist for when I make commits
 * Bump version to reflect minor fixes
 * Version 0.12
 * Bump version
 * Require version 0.13 of Sys::Syslog.  Apparently older versions did not export tags we need.

[2008-05-25]
 * Update META information to match reality.  Also bump version
 * Final perltidy before release
 * Make sure Chris Josephs is also mentioned.
 * Bump version before release

[2008-05-24]
 * Effective immediately, Log::Fine is distributed under the 2-clause BSD license.

[2008-05-23]
 * Link clean-up
 * Clean up POD for HTML format

[2008-05-22]
 * Welcome to 0.05
 * regen
 * Proof-read POD documentation.  Clean-ups and elaborations where necessary.
 * regen
 * Audit POD documentation

[2008-05-21]
 * regen
 * We are now at version 0.04
 * Add API for adjusting the timestamp within log messages.  Also add a sanity check for Formatter->format().
 * Give inspirational credit as appropriate.  Also update documentation here and there.
 * Lose redundant logger test
 * Reference file handle directly in test to avoid confusion.
 * Fix context leak ;)

[2008-05-20]
 * Skip tests if Test::Output isn't installed
 * Use Test::Output to validate printing to STDERR & STDOUT
 * Lose some redundant POD documentation that slipped in.
 * Fix small case of context leaking ;)
 * Replace lib/Log/Fine/Handle/Test.pm with ../String.pm and update references as appropriate
 * Make sure that a logger object's name doesn't include any funky characters
 * Elaborate on cloning

[2008-05-16]
 * Add cloning capabilities.
 * Oops.  s/output/console/
 * Bump version
 * Add two new shorthand masks: LOGMASK_ALL (for all log masks) and LOGMASK_ERROR (for LOGMASK_ERR and below).
 * Per suggestion from Dan, rename Output.pm to Console.pm and update references accordingly.
 * Add api for adjusting log skip.  Also renamed {skip} to {_skip} indicating that it's a value that shouldn't be touched.

[2008-05-15]
 * Make sure we store any new Logger object that's created.  Various pod and code clean-ups while I'm here.

[2008-05-10]

[2008-05-09]
 * Add some tests for both log levels and masks.

[2008-05-08]
 * Bump version
 * All good boys clean up after themselves!
 * Blank meta file so 'make dist' works
 * Initial entry of Log::Fine::Handle::File::Timestamp and associated unit test.

[2008-05-07]
 * Lose $VERSION.  Also add SEE ALSO section
 * Revert -r12.  Test.pm needed to pass 'make test'
 * Log::Fine::Handle::Test is no longer necessary.  Removing.
 * Lose $VERSION which is only necessary in Fine.pm
 * Clean up POD documentation
 * new objects now take a regular hash rather than a hash ref.
 * Replace all instances of BSDLog with Fine as appropriate.
 * Move BSDLog.pm and friends to Fine to reflect the name of this module: Log::Fine
 * The great massive perltidy into KNF!
 * Set svn:keywords as appropriate
 * Initial import of Log::BSDLog
 * New repository setup