SYNOPSIS In your config.yml logger: log4perl log: core log4perl: config_file: log4perl.conf In your log4perl.conf log4perl.rootLogger = DEBUG, LOG1 log4perl.appender.LOG1 = Log::Log4perl::Appender::File log4perl.appender.LOG1.filename = /var/log/mylog.log log4perl.appender.LOG1.mode = append log4perl.appender.LOG1.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.LOG1.layout.ConversionPattern = %d %p %m %n DESCRIPTION This class is an interface between Dancer's logging engine abstraction layer and the Log::Log4perl library. In order to use it, you have to set the `logger' engine to `log4perl'. You can use either Log::Log4perl or Log::Log4perl::Tiny. If you want to use the latter, just specify the `tiny' option in the specific configuration. You can decide to let the module perform the initialisation of the logging system, or you can do it by yourself. In the latter case, you can pass the `no_init' parameter, which instructs the module not to perform the initialisation. After initialisation, you can decide to use Dancer's functions or the ones provided by either Log::Log4perl or Log::Log4perl::Tiny, e.g. the stealth loggers in case of a simplified interface. Note that Dancer's `log' and `logger_format' options are still honored, which means you need to be aware of the following: `logger_format' is still processed and becomes `%m' in Log4perl's format placeholders. This allows you to pass Dancer placeholders that aren't available as Log4perl placeholders. Dancer's `core' level messages are passed to Log4perl as level `trace' but will not be passed unless Dancer's `log' config is `core'. `log' should be set a lower priority than the lowest priority as set in your Log4perl configuration. If it isn't, Dancer::Logger::Abstract will not pass the message to Log4perl. CONFIGURATION The configuration capabilities vary depending on the underlying library you have, even though the following configurations are common: no_init skip the initialisation phase of the logging module, assuming that it is performed elsewhere. tiny allows you to decide whether Log::Log4perl (when set to a false value) or Log::Log4perl::Tiny (when set to a true value) should be used. Log::Log4perl If you're using standard Log::Log4perl, then you have two alternatives to pass a configuration: config_file via a configuration file, using the `config_file' option: logger: log4perl log4perl: config_file: log4perl.conf config via a straight configuration text, using the `config' option: logger: log4perl log4perl: config: | log4perl.rootLogger = DEBUG, LOG1 log4perl.appender.LOG1 = Log::Log4perl::Appender::File log4perl.appender.LOG1.filename = /var/log/mylog.log log4perl.appender.LOG1.mode = append log4perl.appender.LOG1.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.LOG1.layout.ConversionPattern = %d %p %m %n Log::Log4perl::Tiny If all you have is Log::Log4perl::Tiny, you can set some parameters: level the log `level' logger: log4perl log4perl: tiny: 1 level: INFO format the log `format' (aliased to `layout' as well) logger: log4perl log4perl: tiny: 1 format: [%p] %m%n EXAMPLES All examples below assume that you have your Log::Log4perl initialisation stuff inside a file called log4perl.conf, e.g. something along the following lines: log4perl.logger = INFO, Screen log4perl.appender.Screen = Log::Log4perl::Appender::Screen log4perl.appender.Screen.stderr = 1 log4perl.appender.Screen.stdout = 0 log4perl.appender.Screen.layout = Log::Log4perl::Layout::PatternLayout log4perl.appender.Screen.layout.ConversionPattern = [%d] [%-5p] %m%n The above initialisation text is actually what you get by default. Log::Log4perl, Automatic Initialisation, Dancer Logging Interface In this case you'll probably want to let the module handle the initialisation and forget about Log::Log4perl in your code. In the Dancer configuration file: # config.yml logger: log4perl log: info log4perl: config_file: log4perl.conf In your code: # somewhere... get '/please/warn' => sub { warning "ouch!"; # good ol' Dancer warning return ':-)'; }; Log::Log4perl, Manual Initialisation, Log::Log4perl Stealth Interface If you want to use Log::Log4perl's stealth interface, chances are you also want to avoid a full configuration file and rely upon `easy_init()'. In this case, you will probably want to perform the initialisation by your own, so your configuration file will be bare bones: # config.yml logger: log4perl log: info log4perl: no_init: 1 and your code will contain all the meat: use Log::Log4perl qw( :easy ); Log::Log4perl->easy_init($INFO); get '/please/warn' => sub { WARN 'ouch!'; # Log::Log4perl way of warning return ';-)'; }; Log::Log4perl, Whatever Initialisation, Whatever Interface Whatever the method you use to initialise the logger (but take care to initialise it once and only once, see Log::Log4perl), you can always use both Dancer and Log::Log4perl functions: use Log::Log4perl qw( :easy ); get '/please/warn/2/times' => sub { warning 'ouch!'; # Dancer style WARN 'OUCH!'; # Log::Log4perl style return ':-D'; }; If you don't like either functional interface, and prefer to stick to Log::Log4perl's object-oriented interface to avoid collisions in function names: use Log::Log4perl (); get '/please/warn/2/times' => sub { get_logger()->warn('ouch!'); # Log::Log4perl, OO way return 'B-)'; }; Well, you get the idea... just peruse Log::Log4perl documentation for more! Log::Log4perl::Tiny, Automatic Initialisation, Any Interface If you prefer to use Log::Log4perl::Tiny you can put the relevant options directly inside the configuration file: # config.yml logger: log4perl log: debug log4perl: tiny: 1 level: DEBUG format: [%p] %m%n At this point, you can import the relevant methods in your code and use them as you would with Log::Log4perl: use Log::Log4perl::Tiny qw( :easy ); get '/please/warn' => sub { WARN 'ouch!'; # Log::Log4perl(::Tiny) way of warning # you can also use Dancer's warning here... warning 'OUCH!'; return ';-)'; }; Log::Log4perl::Tiny, Any Initialisation, Any Interface As an alternative to the previous example, you can also limit the configuration file to a minimum: # config.yml logger: log4perl log: info log4perl: tiny: 1 and initialise the logging library inside the code: use Log::Log4perl::Tiny qw( :easy ); Log::Log4perl->easy_init($INFO); get '/please/warn' => sub { WARN 'ouch!'; # Log::Log4perl(::Tiny) way of warning # you can also use Dancer's warning here... warning 'OUCH!'; return ';-)'; }; SUPPORT If you find a bug, have a comment or (constructive) criticism you have different options: - just write to the AUTHOR - open a bug request on the relevant RT queue at https://rt.cpan.org/Public/Dist/Display.html?Name=Dancer-Logger-Log4 perl - open an issue or propose a patch on GitHub at https://github.com/polettix/Dancer-Logger-Log4perl