How To Log to Multiple Files Using Log4perl

How to log to multiple files using a single Log4perl logger.

Example: you have an INFO level logger, but you want to log warnings and errors to separate files. You also want to log to the screen.

### Throw everything into the rootLogger, then add filters and appenders
log4perl.rootLogger=INFO, LOGFILE, WARNLOG, ERRLOG, SCREEN

### Filters

# Warning log to log ONLY warnings
log4perl.filter.MatchWARN = Log::Log4perl::Filter::LevelMatch
log4perl.filter.MatchWARN.LevelToMatch = WARN
log4perl.filter.MatchWARN.AcceptOnMatch = true

# Error log to log ERROR and above (ERROR and FATAL, but nothing else)
log4perl.filter.MatchERROR = Log::Log4perl::Filter::LevelRange
log4perl.filter.MatchERROR.LevelMin = ERROR
log4perl.filter.MatchERROR.AcceptOnMatch = true

### Appenders
log4perl.appender.SCREEN           = Log::Log4perl::Appender::Screen
log4perl.appender.SCREEN.mode      = append
log4perl.appender.SCREEN.layout    = Log::Log4perl::Layout::PatternLayout
log4perl.appender.SCREEN.layout.ConversionPattern  = $pattern

log4perl.appender.LOGFILE          = Log::Log4perl::Appender::File
log4perl.appender.LOGFILE.filename = $abslogfile
log4perl.appender.LOGFILE.mode     = append
log4perl.appender.LOGFILE.layout   = PatternLayout
log4perl.appender.LOGFILE.layout.ConversionPattern = $pattern

log4perl.appender.WARNLOG          = Log::Log4perl::Appender::File
log4perl.appender.WARNLOG.filename = $abslogfile.warn
log4perl.appender.WARNLOG.mode     = append
log4perl.appender.WARNLOG.layout   = PatternLayout
log4perl.appender.WARNLOG.layout.ConversionPattern = $pattern
log4perl.appender.WARNLOG.Filter   = MatchWARN

log4perl.appender.ERRLOG           = Log::Log4perl::Appender::File
log4perl.appender.ERRLOG.filename  = $abslogfile.error
log4perl.appender.ERRLOG.mode      = append
log4perl.appender.ERRLOG.layout    = PatternLayout
log4perl.appender.ERRLOG.layout.ConversionPattern = $pattern
log4perl.appender.ERRLOG.Filter    = MatchERROR

This entry was posted in Languages and tagged . Bookmark the permalink.

One Response to How To Log to Multiple Files Using Log4perl

  1. todd says:

    Great explanation of a common Log4Perl use case. Too bad the documentation isn’t this clear!

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>