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
Great explanation of a common Log4Perl use case. Too bad the documentation isn’t this clear!