Log::Any::Adapter - Tell Log::Any where to send its logs |
Log::Any::Adapter - Tell Log::Any where to send its logs
version 1.040
# 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', ...);
Log::Any::Adapter connects log producers and log consumers. Its methods instantiate a logging adapter (a subclass of the Log::Any::Adapter::Base manpage) and route log messages from one or more categories to it.
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.
Three basic adapters come with this distribution -- the Log::Any::Adapter::File manpage, the Log::Any::Adapter::Stdout manpage and the Log::Any::Adapter::Stderr manpage:
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.
A sampling of adapters available on CPAN as of this writing:
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.
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:
qr//
) matching
multiple categories. If not specified, all categories will be routed to the
adapter.
{ 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
. If you
call set
repeatedly without calling remove
you will leak memory. For
most programs that set an adapter once until the end of the program, this
shouldn't matter.
use Log::Any::Adapter
, it calls <
Log::Any::Adapter-
set >> with those arguments.
set
.
Log::Any
maintains a stack of entries created via set
. If you call
set
repeatedly, you will leak memory unless you do one of the
following:
remove
on the adapter returned from set
when you are done with it
use the lexically
feature to set a guard variable that will clean it up when it goes out of scope
When getting 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
This software is copyright (c) 2014 by Jonathan Swartz and David Golden.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
Log::Any::Adapter - Tell Log::Any where to send its logs |