NAME
Log::Any::Adapter -- Tell Log::Any where to send its logs
VERSION
version 0.05
SYNOPSIS
use Log::Any::Adapter;
# 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*.
The following adapters are available on CPAN as of this writing:
* Log::Any::Adapter::Log4perl - work with log4perl
* Log::Any::Adapter::Dispatch - work with Log::Dispatch or
Log::Dispatch::Config
You may also 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'.
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({ local => \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.