Log::Handler::Config - A simple config loader.
use Log::Handler; use Log::Handler::Config; my $conf = Log::Handler::Config->config( filename => 'file.conf', plugin => 'YAML', section => 'Log::Handler', ); my $log = Log::Handler->new(); while ( my ($type, $config) = each %$conf ) { $log->add($type => $config); } # or use Log::Handler; my $log = Log::Handler->new(); $log->config( filename => 'file.conf', plugin => 'YAML', section => 'Log::Handler', );
This module makes it possible to load the configuration from a file.
With this method it's possible to load a configuration for your outputs. Note that a special structure is needed to load the configuration successfully.
For each output object it must exist a own section. Here a example as hash:
my %config = ( # the configuration for a file file => { foo => { filename => 'file1.log', maxlevel => 'info', minlevel => 'warn', }, bar => { filename => 'file2.log', maxlevel => 'error', minlevel => 'emergency', } } # the configuration for email email => { foo => host => 'foo.example', from => 'me@me.example', to => 'you@foo.example', maxlevel => 'error', minlevel => 'emergency', }, # and_so_on ... } );
You can store your configuration to a file and loads it. There are different config plugins available.
If your configuration contains a default section then this parameters are used for all other sections. Example:
default
my %config = ( # the configuration for a file file => { default => { mode => 'append', }, foo => { filename => 'file1.log', maxlevel => 'info', minlevel => 'warn', }, bar => { filename => 'file2.log', maxlevel => 'error', minlevel => 'emergency', }, baz => { filename => 'file3.log', maxlevel => 'debug', minlevel => 'debug', mode => 'trunc', }, }
The option mode is set to append for the log file file1.log and file2.log. For file3.log it's overwritten and set to trunc.
mode
append
file1.log
file2.log
file3.log
trunc
The configuration file.
With this option you can set the plugin you want to use. There are 3 plugins available at the moment:
Config::General Config::Properties YAML
If the option is not set then the file extension is used to determine the configuration style:
Config::General - cfg, conf Config::Properties - props, jcfg, jconf YAML - yml, yaml
Examples:
# use file.conf and YAML $log->config( filename => 'file.conf', plugin => 'YAML' ); # automatically use YAML $log->config( filename => 'file.yaml' ); # automatically use Config::General $log->config( filename => 'file.conf' );
If the extension is not defined then Config::General is used by default.
Config::General
If your configuration is placed in file where you configure your complete program you can push your output configuration into a sub section:
<output> <file> <mylog> filename = file.log minlevel = 0 maxlevel = 7 </mylog> </file> </output> <Another_Script_Config> foo = bar </Another_Script_Config>
Now your configuration is placed in the output section. You can load this section with
output
$log->config( filename => 'file.conf', section => 'output', ); # or if you load the configuration yourself $log->config( config => $config, section => 'output', ); # or just $log->config( config => $config->{output} );
With this option you can pass a configuration that you loaded already but it must have the right structure! Take a look to the examples!
Config::General - inspired by the well known apache config format Config::Properties - Java-style property files YAML - optimized for human readability
<file> <mylog> fileopen = 1 reopen = 1 permissions = 0640 maxlevel = info mode = append timeformat = %b %d %H:%M:%S trace = 0 debug_mode = 2 filename = example.log minlevel = warn prefix = '%T %H[%P] [%L] %S: ' newline = 1 </mylog> </file>
--- file: mylog: debug_mode: 2 filename: example.log fileopen: 1 maxlevel: info minlevel: warn mode: append newline: 1 permissions: 0640 prefix: '%T %H[%P] [%L] %S: ' reopen: 1 timeformat: '%b %d %H:%M:%S' trace: 0
file.mylog.reopen = 1 file.mylog.fileopen = 1 file.mylog.maxlevel = info file.mylog.permissions = 0640 file.mylog.mode = append file.mylog.timeformat = %b %d %H:%M:%S file.mylog.trace = 0 file.mylog.debug_mode = 2 file.mylog.minlevel = warn file.mylog.filename = example.log file.mylog.newline = 1 file.mylog.prefix = '%T %H[%P] [%L] %S: '
The config (Config::General)
<output> <file> <default> newline = 1 permissions = 0640 timeformat = %b %d %H:%M:%S fileopen = 1 reopen = 1 mode = append prefix = "%T %H[%P] [%L] %S: " trace = 0 debug_mode = 2 </default> <common> filename = example.log maxlevel = info minlevel = warn </common> <error> filename = example-error.log maxlevel = warn minlevel = emergency trace = 1 </error> <debug> filename = example-debug.log maxlevel = debug minlevel = debug </debug> </file> </output>
Load the config
$log->config( filename => 'file.conf', section => 'output', );
<file> <default> newline = 1 permissions = 0640 timeformat = %b %d %H:%M:%S fileopen = 1 reopen = 1 mode = append prefix = "%T %H[%P] [%L] %S: " trace = 0 debug_mode = 2 </default> <common> filename = example.log maxlevel = info minlevel = warn </common> <error> filename = example-error.log maxlevel = warn minlevel = emergency trace = 1 </error> <debug> filename = example-debug.log maxlevel = debug minlevel = debug </debug> </file>
$log->config( filename => 'file.conf' );
$log->config( config => { file => { default => { newline => 1, permissions => '0640', timeformat => '%b %d %H:%M:%S', fileopen => 1, reopen => 1, mode => 'append prefix => '%T %H[%P] [%L] %S: ', trace => 0, debug_mode => 2, }, common => { filename => 'example.log', maxlevel => 'info', minlevel => 'warn', }, error => { filename => 'example-error.log', maxlevel => 'warn', minlevel => 'emergency', trace => 1, }, debug => { filename => 'example-debug.log', maxlevel => 'debug', minlevel => 'debug', }, } } );
<output> <file> <default> newline = 1 permissions = 0640 timeformat = %b %d %H:%M:%S fileopen = 1 reopen = 1 mode = append prefix = "%T %H[%P] [%L] %S: " trace = 0 debug_mode = 2 </default> <common> filename = example.log maxlevel = info minlevel = warn </common> <error> filename = example-error.log maxlevel = warn minlevel = emergency trace = 1 </error> </file> <email> <default> timeout = 60 debug = 0 subject = My subject buffer = 100 interval = 300 prefix = "%T %H[%P] [%L] %S: " trace = 0 debug_mode = 2 </default> <admin> host = foo.example from = me@me.example to = you@foo.example maxlevel = error minlevel = emergency trace = 1 </admin> <op> host = bar.example from = me@me.example to = you@bar.example maxlevel = warn minlevel = emergency </op> </email> </output>
Carp Params::Validate UNIVERSAL::require
No exports.
Please report all bugs to <jschulz.cpan(at)bloonix.de>.
Jonny Schulz <jschulz.cpan(at)bloonix.de>.
Do you have any questions or ideas?
MAIL: <jschulz.cpan(at)bloonix.de>
If you send me a mail then add Log::Handler into the subject.
* Log::Handler::Output::DBI * Log::Handler::Output::Socket
Copyright (C) 2007 by Jonny Schulz. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR, OR CORRECTION.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
To install Log::Handler, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Log::Handler
CPAN shell
perl -MCPAN -e shell install Log::Handler
For more information on module installation, please visit the detailed CPAN module installation guide.