Revision history for Log-Any

** denotes an incompatible change

1.714     2023-03-20 11:48:30-05:00 America/Chicago


  - Fixed Syslog adaptor losing ident and facility information if
    another library wrongly calls Sys::Syslog::closelog(). This is not
    a perfect solution, but a perfect solution can only ever be to fix
    the close that's calling closelog() :P

    Thanks to Tom Christiansen and @GrantStreetGroup for reporting this
    issue and providing the fix.

1.713     2022-12-12 12:44:52-06:00 America/Chicago


  - Fixed tests failing due to missing Devel::Stacktrace. This is an
    optional module, so we do not explicitly depend on it. Thanks
    @dbevans and @perlpunk for reporting this issue! (Github #93)

1.712     2022-12-09 11:05:10-06:00 America/Chicago


  - Added `Log::Any::Proxy::WithStackTrace` to provide a stack trace at
    the caller site. Thanks @larryl and @GrantStreetGroup for providing
    this feature!


  - Removed Travis, as they stopped supporting free Github repos :(

1.711     2022-11-22 11:28:01-06:00 America/Chicago


  - Fixed proxy not exposing 'category' attribute (#86). Thanks
  - Fixed not being able to get a proxy for the "root" category (empty
    string) (#90). Thanks @XSven!

1.710     2021-08-02 10:11:33-05:00 America/Chicago


    - Removed explicit declaration of core dependencies to improve user

1.709     2021-02-17 15:16:20-06:00 America/Chicago


    - Added "Log::Any->has_consumer" for the rare case where one needs
      to know if a consumer has already been configured.

1.708     2020-01-12 22:56:43-05:00 America/New_York


    - Added 'Capture' adapter for capturing log messages in an array or
      running an arbitrary callback. This makes it easier to test log
      messages, collect messages from a certain scope for later display.
      Thanks @nrdvana! [Github #77]

    - Added Log::Any::Adapter 'get' class method to get an adapter for
      a category. This allows bypassing the Proxy and using the Adapter
      directly. Doing so breaks all the features enabled by a Proxy, and
      so should only be used in special circumstances (definitely not in
      CPAN modules). Thanks @nrdvana! [Github #78]

    - Added 'Multiplex' adapter for directing log output to one or more
      Log::Any adapters. This allows, for example, basic logging to
      Stderr and logging to a remote Syslogd or Elastic. Thanks
      @jrubinator and @GrantStreetGroup for contributing this!
      [Github #79, Github #16]

1.707     2018-08-01 22:55:01-05:00 America/Chicago


    - The local context hash (`$log->context`) and the log hash
      (`$log->$level( $message, $hash )`) now get merged correctly,
      combining contextual logging and structured logging. Thanks
      @mephinet! [Github #76] [Github #73]

1.706     2018-07-06 20:20:00-05:00 America/Chicago


    - The File, Stderr, and Stdout adapters now correctly allow being
      set to the "emergency" log level threshold. Previously, trying to
      only allow "emergency" log lines would result in all logs being
      written (and a warning about an invalid log level being set).
      Thanks @alabamapaul! [Github #74]

1.705     2018-01-17 13:49:22-06:00 America/Chicago


    - Fixed the `binmode` attribute of the File adapter not working
      properly. Thanks @MadLord80! [Github #72]

1.704     2017-12-17 18:13:33-06:00 America/Chicago


    - Fixed some invalid POD and added a test to ensure POD validity
      before release. Thanks @shlomif! [Github #67][Github #68]

    - Improved performance when no work needed to be done. Thanks
      @mephinet! [Github #70]

1.703     2017-11-29 10:56:17-06:00 America/Chicago


    - Fixed log format methods (errorf, warnf, infof, etc...) not
      returning the formatted message sometimes. Thanks @vshekun!
      [Github #64]

1.702     2017-11-28 15:18:40-06:00 America/Chicago


    - Fixed log output disappearing when the `default_adapter` is set.
      Thanks @dallaylaen! [Github #65]

1.701     2017-10-02 14:36:51-05:00 America/Chicago


    - Fixed more method aliases in Log::Any::Adapter::Syslog that were
      mapped to invalid syslog priorities. Thanks @legaultp for the

1.700     2017-09-28 16:59:22-05:00 America/Chicago


    - Fixed version of Log::Any::Adapter::Syslog so that installing it
      will also install the rest of Log-Any.

    - Fixed method aliasing in Log::Any::Adapter::Syslog for "error"
      log method. Thanks @legaultp for the patch!

1.051     2017-08-06 20:41:53-05:00 America/Chicago (TRIAL RELEASE)


    - LOG_ANY_DEFAULT_ADAPTER now correctly logs to the given adapter.

      Previously, if no other adapter was set, Log::Any used its
      default, super-fast "Null" proxy that simply drops all messages
      without checking adapters. Now Log::Any will correctly detect the
      environment variable and create the correct, normal proxy object.

      Thanks @tm604 for the report and @mephinet for the patch!

1.050     2017-08-03 22:28:37-05:00 America/Chicago (TRIAL RELEASE)


    - Added structured logging to easily log single hash references in
      a parsable format. Thanks @mephinet!

    - Added contextual logging to attach information to log messages
      based on the current context.

      For example, all log messages being generated by a particular HTTP
      request could be logged with the URL, even if they're from a part
      of the application that doesn't know what HTTP is.

      This is very similar to Log::Log4perl's Mapped Diagnostic Context.

      Thanks @mephinet!

1.049     2017-03-28 16:02:10-05:00 America/Chicago


    - Fixed failing tests on Windows because of path separator
      interpolation. Thanks @nanis [Github #56]

    - Added explicit core dependency on Sys::Syslog in case of Perls
      with non-standard core libraries. Thanks @nanis [Github #57]

1.048     2017-03-27 15:16:12-05:00 America/Chicago

    - No changes since 1.047 trial release

1.047     2017-03-22 20:22:47-05:00 America/Chicago (TRIAL RELEASE)


    - Fixed backwards-compatibility with users using the Unix::Syslog
      macros in Log::Any::Adapter::Syslog. This requires that the user
      have Unix::Syslog installed (which Log::Any does not explicitly
      depend on).

    - Log level aliases are now case-insensitive to match the regular
      log levels. Prior to this, "WARNING", "Warning", and "warning"
      would all work, but "WARN", and "Warn" would not, only "warn".
      Thanks to @0x62ash for reporting this issue. [Github #55]

    - Invalid log levels for the File, Stderr, and Stdout adapters now
      result in a warning, and the default level of "trace" is used.
      Previously, no warning would be issued and no logs would be
      generated. Thanks to @0x62ash for reporting this issue. [Github

1.046     2017-01-11 21:22:57-06:00 America/Chicago (TRIAL RELEASE)


    - The Syslog adapter is now part of the core distribution, since it
      relies only on core Perl modules.

1.045     2016-11-11 21:52:46-06:00 America/Chicago

    - No changes from previous (trial) release 1.044

1.044     2016-11-06 15:30:35-06:00 America/Chicago (TRIAL RELEASE)


    - Imported log object can now be called anything instead of just
      `$log`. This means `use Log::Any '$LOG'` or `use Log::Any '$foo'`
      now work.

1.043     2016-11-03 21:31:18-05:00 America/Chicago (TRIAL RELEASE)


    - Objects that overload stringification are now stringified
      correctly (instead of run through Data::Dumper). Thanks @mephinet!

1.042     2016-08-26 23:37:33-05:00 America/Chicago


    - Default adapters can now be configured with arguments (thanks

1.041     2016-08-18 00:00:10-05:00 America/Chicago (TRIAL RELEASE)


    - Logging methods now return the formatted log string so that it can
      be used in a `die` or `warn` call.


    - A new default log proxy (Log::Any::Proxy::Null) is used when there
      are no adapters configured (and so no place for logs to go). This
      proxy does no processing and is about 1000% percent faster on my


    - Suppress 'redundant argument' warnings if too many arguments are
      given to a log formatting string.

1.040     2016-02-24 17:47:00-05:00 America/New_York


    - Fixed duplicated documentation sections.

1.038     2016-02-10 14:15:31-07:00 America/Mazatlan

    - No changes from 1.037

1.037     2016-02-05 20:22:34-05:00 America/New_York (TRIAL RELEASE)


    - Fixed t/filescreen.t Unicode string tests to use a backwards
      compatible form.  Should fix tests before 5.16.

1.035     2016-02-04 14:47:20-05:00 America/New_York (TRIAL RELEASE)


    - The default formatter now replaces a code reference argument with
      the results of calling the code reference ONLY when it is the first
      argument (in place of a format string).  Code references in
      subsequent arguments (to sprintf) are not executed, as this would
      break backwards compatibility.


    - Noted that repeatedly calling 'set' to set an adapter without calling
      'remove' or using the 'lexically' feature will leak memory.

1.033     2016-02-03 10:32:57-05:00 America/New_York (TRIAL RELEASE)


    - The default formatter now expands code references.  If the first
      argument is a code reference, it is expanded and returned.  If an
      argument to "sprintf" style formatting is a code reference, it is


    - The File adapter now opens files with the ":utf8" layer.  It also
      takes a 'binmode' attribute to change the default.


    - does_not_contain_ok test adapter function now gives proper
      diagnostic message

    - all diagnostic messages that output the captured log now
      correctly dump the log with pretty formatting


    - documented the 'proxy_class' argument to `get_logger`


    - Data::Dumper is loaded lazily, to reduce module load times
      for programs that don't need it.

1.032     2015-03-26 17:23:37-04:00 America/New_York

    - no changes from 1.031

1.031     2015-03-26 06:08:17-04:00 America/New_York (TRIAL RELEASE)


    - Log::Any::Adapter::Test passed through all constructor arguments,
      which could be fatal when mocking adapters without all key-value
      pairs (like Log::Any::Adapter::File); now this only passes through
      the category and ignores other parameters when used as an
      adapter class override.

1.03      2015-01-01 22:39:41-05:00 America/New_York


    - Log::Any::Proxy concatenates arguments to basic logging functions
      with a space character before passing them to adapters as a single
      string.  This ensures consistency across adapters that handle
      multiple arguments differently.

1.02      2014-12-28 07:06:49-05:00 America/New_York


    - Some adapters relied on Log::Any::Adapter::Util also loading
      Log::Any so this behavior has been restored.

1.01      2014-12-26 22:25:13-05:00 America/New_York


    - 'numeric_level' was not exported properly from

1.00      2014-12-25 22:04:13-05:00 America/New_York


    - Logging now goes via a Log::Any::Proxy object instead of directly to
      an adapter. This allows easy customization of the message production.

    - File, Stdout, and Stderr adapters now support a minimum
      log level parameter.


    - Removed dead code from Log::Any::Adapter::Base; particularly this
      was the formatting code, since this is now handled by


    - File will flock the handle when writing (if flock is avaiable).

    - Won't die if adapters aren't loadable modules as long as they
      provide a constructor.  This allows using private adapters
      defined in another file.


    - Revised docs for creating adapters

    - Fixed typos and improved docs for Log::Any::Adapter::Util; removed
      stub docs for modules that didn't need it.


    - Deprecated some methods in Log::Any::Adapter::Util


    - Merged Log-Any and Log-Any-Adapter distributions; reduces code
      duplication and ensures Log::Any and adapter framework stay in sync

    - Eliminates all non-core dependencies (as of Perl 5.8.1), including
      Capture::Tiny, Devel::GlobalDestruction and Guard

0.92      2014-12-15 07:12:38-05:00 America/New_York (TRIAL RELEASE)

0.91      2014-12-14 22:13:09-05:00 America/New_York (TRIAL RELEASE)

0.90      2014-12-12 17:08:22-05:00 America/New_York (TRIAL RELEASE)

0.15  Apr 10, 2013

* Fixes
  - Hide 'package Log::Any::Adapter' from PAUSE/Module::Metadata - miyagawa

0.14  Aug 31, 2011

* Fixes
  - Fix version number in Log/ - Stephen Thirlwall

0.13  Aug 2, 2011

* Fixes
  - Fix typo in lib/Log/Any/Adapter/ - RT #69850 - Stephen Thirlwall

0.12  Mar 23, 2011

* Fixes
  - Return false from null adapter is_xxx methods - RT #64164 - Chip Salzenberg
  - Eliminate 'subroutine redefined' warning in case Log::Any::Adapter loaded before

* Implementation
  - Migrate to Dist::Zilla

0.11  Feb 12, 2010

* Improvements
  - Add trace level - suggested by Szymon Swierkosz

0.10  Jan 5, 2010

* Fixes
  - Fix Log::Any::Core to support references in printf-style methods

0.09  Jan 5, 2010

* Improvements
  - Convert undef to string "<undef>" in printf-style methods - RT #53398, suggested by Steven Haryanto

0.08  Dec 15, 2009

* Fixes
  - Fix Log::Any::Test to support full logging API (aliases and printf methods)

0.07  Dec 7, 2009

* Implementation
  - Depend on Test::Simple rather than Test::More

* Improvements
  - Add Log::Any::Test, to aid in testing code that uses Log::Any

0.06  Oct 31, 2009

* Fixes
  - Implement Log::Any->set_adapter again for backward compatibility with 0.04 and earlier

0.05  Oct 27, 2009

* Implementation
  - ** Strip Log::Any down to a relative minimum, so as to keep it stable and
    unchanging. Move everything else to Log::Any::Adapter.

0.04  Sep 3, 2009

* Fixes
  - Replace Test::Deep::cmp_deeply with an internal version to avoid Test::Deep dependency

0.03  Jul 17, 2009

* Improvements
  - Eliminated extra '::Log' from adapter names, e.g. Log::Any::Adapter::Log::Dispatch is
    now Log::Any::Adapter::Dispatch. The long name was properly descriptive but was making
    me wince every time.

0.02  Jul 14, 2009

* Fixes
  - Fix logging aliases like warn => warning

* Implementation
  - Eliminate unnecessary Test/ class
  - Precompute alias and method lists like Log::Any->logging_methods

0.01  Jul 11, 2009

- Initial version