NAME Log::Any::Adapter -- Tell Log::Any where to send its logs VERSION version 0.11 SYNOPSIS # Log to a file, or stdout, or stderr for all categories # use Log::Any::Adapter ('File', '/path/to/file.log'); use Log::Any::Adapter ('Stdout'); use Log::Any::Adapter ('Stderr'); # Use Log::Log4perl for all categories # Log::Log4perl::init('/etc/log4perl.conf'); Log::Any::Adapter->set('Log4perl'); # Use Log::Dispatch for Foo::Baz # use Log::Dispatch; my $log = Log::Dispatch->new(outputs => [[ ... ]]); Log::Any::Adapter->set( { category => 'Foo::Baz' }, 'Dispatch', dispatcher => $log ); # Use Log::Dispatch::Config for Foo::Baz and its subcategories # use Log::Dispatch::Config; Log::Dispatch::Config->configure('/path/to/log.conf'); Log::Any::Adapter->set( { category => qr/^Foo::Baz/ }, 'Dispatch', dispatcher => Log::Dispatch::Config->instance() ); # Use your own adapter for all categories # Log::Any::Adapter->set('+My::Log::Any::Adapter', ...); DESCRIPTION The `Log-Any-Adapter' distribution implements Log::Any class methods to specify where logs should be sent. It is a separate distribution so as to keep `Log::Any' itself as simple and unchanging as possible. You do not have to use anything in this distribution explicitly. It will be auto-loaded when you call one of the methods below. ADAPTERS In order to use a logging mechanism with `Log::Any', there needs to be an adapter class for it. Typically this is named Log::Any::Adapter::*something*. Adapters in this distribution Three basic adapters come with this distribution -- File, Stdout and Stderr: use Log::Any::Adapter ('File', '/path/to/file.log'); use Log::Any::Adapter ('Stdout'); use Log::Any::Adapter ('Stderr'); # or use Log::Any::Adapter; Log::Any::Adapter->set('File', '/path/to/file.log'); Log::Any::Adapter->set('Stdout'); Log::Any::Adapter->set('Stderr'); All of them simply output the message and newline to the specified destination; a datestamp prefix is added in the `File' case. For anything more complex you'll want to use a more robust adapter from CPAN. Adapters on CPAN A sampling of adapters available on CPAN as of this writing: * Log::Any::Adapter::Log4perl * Log::Any::Adapter::Dispatch * Log::Any::Adapter::FileHandle * Log::Any::Adapter::Syslog You may find other adapters on CPAN by searching for "Log::Any::Adapter", or create your own adapter. See Log::Any::Adapter::Development for more information on the latter. SETTING AND REMOVING ADAPTERS Log::Any::Adapter->set ([options, ]adapter_name, adapter_params...) This method sets the adapter to use for all log categories, or for a particular set of categories. *adapter_name* is the name of an adapter. It is automatically prepended with "Log::Any::Adapter::". If instead you want to pass the full name of an adapter, prefix it with a "+". e.g. # Use My::Adapter class Log::Any::Adapter->set('+My::Adapter', arg => $value); *adapter_params* are passed along to the adapter constructor. See the documentation for the individual adapter classes for more information. An optional hash of *options* may be passed as the first argument. Options are: category A string containing a category name, or a regex (created with qr//) matching multiple categories. If not specified, all categories will be affected. lexically A reference to a lexical variable. When the variable goes out of scope, the adapter setting will be removed. e.g. { Log::Any::Adapter->set({lexically => \my $lex}, ...); # in effect here ... } # no longer in effect here `set' returns an entry object, which can be passed to `remove'. use Log::Any::Adapter (...) If you pass arguments to `use Log::Any::Adapter', it calls `Log::Any::Adapter->set' with those arguments. Log::Any::Adapter->remove (entry) Remove an *entry* previously returned by `set'. MULTIPLE ADAPTER SETTINGS `Log::Any' maintains a stack of entries created via `set'. When you get a logger for a particular category, `Log::Any' will work its way down the stack and use the first matching entry. Whenever the stack changes, any `Log::Any' loggers that have previously been created will automatically adjust to the new stack. For example: my $log = Log::Any->get_logger(); $log->error("aiggh!"); # this goes nowhere ... { Log::Any::Adapter->set({ lexically => \my $lex }, 'Log4perl'); $log->error("aiggh!"); # this goes to log4perl ... } $log->error("aiggh!"); # this goes nowhere again SEE ALSO Log::Any COPYRIGHT AND LICENSE This software is copyright (c) 2011 by Jonathan Swartz. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.