The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

XLog::Multi - XLog backend for logging into multiple backends

SYNOPSIS

    my $multi = XLog::Multi->new([
        {logger => XLog::Console->new, min_level => XLog::INFO},
        {logger => XLog::File->new({file => "all.log"}), min_level => XLog::DEBUG, formatter => XLog::Formatter::Pattern->new("[%L] %t: %m")},
        {logger => XLog::File->new({file => "error.log"}), min_level => XLog::WARNING, formatter => "[%L] %t: %m"},
    ]);
    XLog::set_logger($multi);

DESCRIPTION

XLog::Multi allows to log into multiple backends with different levels and formatters.

METHODS

new(\@list)

Creates multi backend from arrayref of backends and params. Each element on the list must be a hashref with the following info:

logger [required]

Backend object

min_level [optional = DEBUG]

Minimum log level for this backend. Please note that messages might not be logged even if their level higher than this param - in case if the main min level (XLog::set_level) is higher. For example:

    XLog::set_level(XLog::WARNING); # main min level
    
    my $multi = XLog::Multi->new([
        {logger => XLog::Console->new, min_level => XLog::INFO},
        {logger => XLog::File->new({file => "error.log"}), min_level => XLog::WARNING},
    ]);
    XLog::set_logger($multi);
    
    XLog::info("hi"); # this message will not be logged
    XLog::set_level(XLog::DEBUG);
    XLog::info("hi"); # this message will be logged on console
    XLog::warning("hi"); # this message will be logged both on console and to file

Also note, that log message evaluation optimization is only on when message level is lower than main min level. Otherwise, if message level is greater than or equal to main log level, it will be evaluated anyway. Even if all min levels in Multi backend are greater than the message level. For example

     XLog::set_level(XLog::DEBUG);
     
     my $multi = XLog::Multi->new([
        {logger => XLog::Console->new, min_level => XLog::WARNING},
    ]);
    XLog::set_logger($multi);
    
    XLog::debug("hi $longmess");
    

$longmess in this example will be interpolated but will not be logged. This is due to current limitations in optimization system.

formatter [optional]

Formatter object/sub/string for this backend. If no formatter is specified, will use main formatter (from module, its parents up to main XLog::set_formatter).