Revision history for Perl extension Log::Dispatch::FileRotate.

1.34 Wed 55 13 2017
    - We now use a a global Mutex object for each open file that gracefully
      handles locking between threads and across forks.  This fixes the
      following deadlock scenarios:
        - a $SIG{__WARN__} handler is installed that logs to
          Log::Dispatch::FileRotate and log_message issues a warning.
        - multiple dispatchers are in logit() at the same time.
    - Abstract locking functions into Log::Dispatch::FileRotoate::Flock module.
    - Remove flock()'ing of the logfile filehandle.  Rely on the lock that
      we hold on the "lockfile" instead to synchronize writes. [Github #12]
      holding a lock on the lockfile when writing the log message.
    - Various pod cleanups and enhancements (Thanks Emanuele Tomasi)
    - Avoid multiple stat() calls on the same filehandle (Thanks Emanuele Tomasi)
    - Add user_constraint option to use a custom function to determine when
      rotation happens (Thanks Emanuele Tomasi).
    - Move rotation code into its own function (Thanks Emanuele Tomasi)

1.30 Thu Aug 03 2017
    - Docs: fix synopsis usage to "name" (incorrect) instead of filename
      (correct) (Thanks Emanuele Tomasi)
    - improve debug() routine so that all debug messages have the same layout
      (Thanks Emanuele Tomasi)
    - fix race condition in lockfile-race-condition.t [sic] (Thanks Emanuele

1.29 Fri Jul 28 2017
    - Fix deadlock on Windows due to the fact that stat() on a filehandle vs a
      path doesn't return the same device field on Windows.

1.28 Thu Jul 27 2017
    *** Multiple fixes to locking code:
    - flock() can be interrupted by a syscall. work around by using a
      safe_flock() wrapper that retries if errno is EAGAIN (and also
    - handle several possible race conditions between open() and flock().
    - DESTROY() was unlinking the lockfile (.logfile.LCK).  This was the cause
      of a race condition where multiple processes could enter the critical
      seciton at the same time.  Avoided by leaving .LCK files in place.
      Probably fixes #77075 (Thanks Emanuele Tomasi).
    - add author test for DESTROY lockfile race condition.

1.27 Thu Jul 06 2017
    - add "check_both" configuration option which allows the use of both time and
      size based rotation at the same time.  If either conditions require a
      rotation, a rotation will happen.  Default is false (previous behaviour).
      Thanks Emanuele Tomasi.  PR #6.
    - make signature test an "author" test and make Test::Signature optional

1.26 Tue May 09 2017
    - add SEE ALSO reference to Log::Dispath::File::Stamped (Thanks Karen

1.25 Mon Apr 10 2017
    - Fix test failures if the test suite is running as root user.

1.24 Tue Feb 14 2017
    - fix test failure on file-open-failure.t related to current locale
    - improve fix to Date::Manip TZ deprecation warnings.

1.23 Thu Feb 09 2017
    - Issue a warning if the lockfile cannot be opened (Thanks KGOESS)
    - Fix POD typo (Thanks Anirvan Chatterjee)

1.22 Thu Oct 06 2016
    - Fix minor POD error (Thanks Matthias Schmitz) [#47665]
    - Remove Log::Log4perl dependency.  The tests now use Log::Dispatch
      directly instead of going through Log4perl. [#55359]
    - Split out "no activity" test case into its own file
    - Use Dist::Zilla to build the dist
    - Move to t/basic.t
    - Allow "size" parameter to contain underscores such as 10_000_000
      (recognized as 10000000) [#41064]
    - Add a signature test (optional, skipped if Module::Signature is not
      installed and only run if TEST_SIGNATURE=1 is passed to make test)
    - Docs: fix synopsis reference to size parameter to make it clear that
      the size is in bytes, not megabytes.  [#88286]

    [REMOVED] - accidental release, bad dist.

1.20 Sat Oct 01 2016
    - Fix Date::Manip warnings about deprecated TZ config variable. If
      Date::Manip 6.x or later is installed we now use SetDate instead.

1.19 Tue Oct 21 2008
    - Added patch from MS to solve bug 39900. Basically logs appearing slower
      than a recurrance cause the module to keep rotating logs. We now jump
      forward to the right recurrance interval. Thanks to the people at Yahoo
      who discovered it.

    - Updated dependancy on Log4Perl to 1.0

1.18 Wed Jun 25 12:19:11 EST 2008
    - rolled up issue with using Date::Manip internal function
    - added extra test for cygwin
    - added better tests for 'max' paramater
    - removed TZ details from doco and pointed people to Date::Manip
1.15 Wed Apr 26 08:09:20 EST 2006
    - Added GPL copyright notice to fit with Perl 5

1.14 Mon Apr 24 13:35:06 EST 2006
    - create copyright notice

1.13 Tue Mar  1 12:04:13 EST 2005
    - Went back to epoch times for comparisions. My comments above
      regarding Date::Manip and MacOSX are silly.
    - Added better lockfile name picking thanks to Stephen Gordon
    - Removed the $$ from the lockfile name as it makes it too uniq

1.12 Mon Feb 28 23:20:03 EST 2005
    - Added code to handle short running proggies like CGIs that want to
      use the DatePattern stuff. Now check mtime of log file to see if we
      need to rotate (at start up only).
    - Got rid of epochs as they conflict with Date::Manip's UnixDate()
      function on MacOSX. This slows us down quite a bit so I am using
      cmp instead of Date_Cmp() to get some speed back.
    - Fixed up some typos and removed some email addresses as requested.
    - Not released

1.11 Thu Sep 25 11:18:04 EST 2003
    - Forgot to update the Doco from 1.10. 
    - Added some missing log4j recurrence patterns and made them
      case insensitive

1.10 Mon Jun 23 09:40:34 EST 2003
    - Seems defaulting to size in Megs happened between 1.05 and 1.06
      which is not what people want. So back to bytes now.

1.09 Thu Jun  5 17:57:46 EST 2003
    - Even better testing of TZ issues. Try to see if we can work around
      them by ignoring and then testing results.

1.08 Thu Jun  5 11:27:49 EST 2003
    - now build log.conf at 'make test' time as we keep having people
      fail due to bad TZ settings
    - Also added some more testing on the recurrances

1.07 Sun May  4 23:42:03 EST 2003
    - fixed up locking in a forked environment
    - speed up in time mode. Cache recurrences. Much quicker now :-)

1.06 Tue Apr 29 16:08:37 EST 2003
    - moved inode tests around a bit to fix a warning message

1.05 Thu Nov 21 09:28:42 EST 2002
    - fixed typos in hash key

1.04 Wed Nov 20 13:43:04 EST 2002
    - added Time based constraints.

1.03 Mon Nov 18 17:19:06 EST 2002
    - added multiple writer stuff. Use flock() to handle locks

1.01 Tue Oct  1 01:21:54 EST 2002
    - Real code copied over h2xs stuff.

0.01  Tue Oct  1 01:12:30 2002
    - original version; created by h2xs 1.20 with options
        -AX -n Log::Dispatch::FileRotate