NAME

Log::Log4perl::Filter::Boolean - Special filter to combine the results of others


SYNOPSIS

    log4perl.logger = WARN, AppWarn, AppError
    log4perl.filter.Match1       = sub { /let this through/ }
    log4perl.filter.Match2       = sub { /and that, too/ }
    log4perl.filter.MyBoolean       = Log::Log4perl::Filter::Boolean
    log4perl.filter.MyBoolean.logic = Match1 || Match2
    log4perl.appender.Screen        = Log::Dispatch::Screen
    log4perl.appender.Screen.Filter = MyBoolean
    log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout


DESCRIPTION

Sometimes, it's useful to combine the output of various filters to arrive at a log/no log decision. While Log4j, Log4perl's mother ship, chose to implement this feature as a filter chain, similar to Linux' IP chains, Log4perl tries a different approach.

Typically, filter results will not need to be passed along in chains but combined in a programmatic manner using boolean logic. ``Log if this filter says 'yes' and that filter says 'no''' is a fairly common requirement but hard to implement as a chain.

Log::Log4perl::Filter::Boolean is a special predefined custom filter for Log4perl which combines the results of other custom filters in arbitrary ways, using boolean expressions:

    log4perl.logger = WARN, AppWarn, AppError
    log4perl.filter.Match1       = sub { /let this through/ }
    log4perl.filter.Match2       = sub { /and that, too/ }
    log4perl.filter.MyBoolean       = Log::Log4perl::Filter::Boolean
    log4perl.filter.MyBoolean.logic = Match1 || Match2
    log4perl.appender.Screen        = Log::Dispatch::Screen
    log4perl.appender.Screen.Filter = MyBoolean
    log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout

Log::Log4perl::Filter::Boolean's boolean expressions allow for combining different appenders by name using AND (&& or &), OR (|| or |) and NOT (!) as logical expressions. Parentheses are used for grouping. Precedence follows standard Perl. Here's a bunch of examples:

    Match1 && !Match2            # Match1 and not Match2
    !(Match1 || Match2)          # Neither Match1 nor Match2
    (Match1 && Match2) || Match3 # Both Match1 and Match2 or Match3


SEE ALSO

eg::L4pResurrectable, Log::Log4perl, Log::Log4perl::NDC, Log::Log4perl::Config, Log::Log4perl::Appender, Log::Log4perl::Util, Log::Log4perl::Level, Log::Log4perl::Filter, Log::Log4perl::Logger, Log::Log4perl::Layout, Log::Log4perl::JavaMap, Log::Log4perl::FAQ, Log::Log4perl::MDC, Log::Log4perl::Resurrector, Log::Log4perl::DateFormat, Log::Log4perl::Filter::Boolean, Log::Log4perl::Filter::LevelRange, Log::Log4perl::Filter::LevelMatch, Log::Log4perl::Filter::StringMatch, Log::Log4perl::Config::Watch, Log::Log4perl::Config::PropertyConfigurator, Log::Log4perl::Config::DOMConfigurator, Log::Log4perl::Config::BaseConfigurator, Log::Log4perl::JavaMap::FileAppender, Log::Log4perl::JavaMap::RollingFileAppender, Log::Log4perl::JavaMap::NTEventLogAppender, Log::Log4perl::JavaMap::TestBuffer, Log::Log4perl::JavaMap::JDBCAppender, Log::Log4perl::JavaMap::ConsoleAppender, Log::Log4perl::JavaMap::SyslogAppender, Log::Log4perl::Util::Semaphore, Log::Log4perl::Appender::Synchronized, Log::Log4perl::Appender::RRDs, Log::Log4perl::Appender::Screen, Log::Log4perl::Appender::DBI, Log::Log4perl::Appender::TestBuffer, Log::Log4perl::Appender::ScreenColoredLevels, Log::Log4perl::Appender::Socket, Log::Log4perl::Appender::Buffer, Log::Log4perl::Appender::Limit, Log::Log4perl::Appender::File, Log::Log4perl::Appender::TestFileCreeper, Log::Log4perl::Appender::TestArrayBuffer, Log::Log4perl::Appender::String, Log::Log4perl::Layout::PatternLayout, Log::Log4perl::Layout::SimpleLayout, Log::Log4perl::Layout::NoopLayout, Log::Log4perl::Layout::PatternLayout::Multiline

Source Code: Log::Log4perl::Filter::Boolean


AUTHOR

Mike Schilli, <log4perl@perlmeister.com>, 2003