NAME
Log::Handler::Config - The main config loader.
SYNOPSIS
use Log::Handler;
my $log = Log::Handler->new();
$log->config(
filename => 'file.conf',
plugin => 'YAML',
section => 'section-name',
);
Or
use Log::Handler;
use Log::Handler::Config;
my $conf = Log::Handler::Config->config(
filename => 'file.conf',
plugin => 'YAML',
section => 'section-name',
);
my $log = Log::Handler->new();
while ( my ($type, $config) = each %$conf ) {
$log->add($type => $config);
}
DESCRIPTION
This module makes it possible to load the configuration from a file.
METHODS
config()
With this method it's possible to load the configuration for your outputs.
The following options are valid:
- filename
-
The configuration file.
- plugin
-
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. - section
-
If you want to write the configuration into a global configuration file then you can create a own section for the logger:
<logger> <file> <mylog> filename = file.log minlevel = 0 maxlevel = 7 </mylog> </file> </logger> <another_script_config> foo = bar bar = baz baz = foo </another_script_config>
Now your configuration is placed in the
output
section. You can load this section with$log->config( filename => 'file.conf', section => 'logger', ); # or if you load the configuration yourself to $config $log->config( config => $config, section => 'logger', ); # or just $log->config( config => $config->{logger} );
Note that the section
mylog
is used as analias
. Later you get it withmy $file_output = $log->get_logger('mylog');
- config
-
With this option you can pass a configuration that you loaded already but it must have the correct hash structure! Take a look to the examples!
PLUGINS
Config::General - inspired by the well known apache config format
Config::Properties - Java-style property files
YAML - optimized for human readability
EXAMPLES
Config structure
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.
A default section
If your configuration contains a default
section then this parameters are used for all other sections. Example:
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 configuration for dbi
dbi => {
...
}
);
The option mode
is set to append
for the log file file1.log
and file2.log
. The configuration for file3.log
will be set to trunc
.
Examples for the config plugins
Config::General
<file>
<mylog>
fileopen = 1
reopen = 1
permissions = 0640
maxlevel = info
mode = append
timeformat = %b %d %H:%M:%S
debug_mode = 2
filename = example.log
minlevel = warn
prefix = '%T %H[%P] [%L] %S: '
newline = 1
</mylog>
</file>
YAML
---
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'
Config::Properties
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.debug_mode = 2
file.mylog.minlevel = warn
file.mylog.filename = example.log
file.mylog.newline = 1
file.mylog.prefix = '%T %H[%P] [%L] %S: '
Load the config from a certain section
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: "
debug_mode = 2
</default>
<common>
filename = example.log
maxlevel = info
minlevel = warn
</common>
<error>
filename = example-error.log
maxlevel = warn
minlevel = emergency
</error>
<debug>
filename = example-debug.log
maxlevel = debug
minlevel = debug
</debug>
</file>
</output>
Load the config
$log->config(
filename => 'file.conf',
section => 'output',
);
Simple configuration without a certain section
The config (Config::General)
<file>
<default>
newline = 1
permissions = 0640
timeformat = %b %d %H:%M:%S
fileopen = 1
reopen = 1
mode = append
prefix = "%T %H[%P] [%L] %S: "
debug_mode = 2
</default>
<common>
filename = example.log
maxlevel = info
minlevel = warn
</common>
<error>
filename = example-error.log
maxlevel = warn
minlevel = emergency
</error>
<debug>
filename = example-debug.log
maxlevel = debug
minlevel = debug
</debug>
</file>
Load the config
$log->config( filename => 'file.conf' );
The config as hash
$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: ',
debug_mode => 2,
},
common => {
filename => 'example.log',
maxlevel => 'info',
minlevel => 'warn',
},
error => {
filename => 'example-error.log',
maxlevel => 'warn',
minlevel => 'emergency',
},
debug => {
filename => 'example-debug.log',
maxlevel => 'debug',
minlevel => 'debug',
},
}
}
);
Configuration for different outputs
<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: "
debug_mode = 2
</default>
<common>
filename = example.log
maxlevel = info
minlevel = warn
</common>
<error>
filename = example-error.log
maxlevel = warn
minlevel = emergency
</error>
</file>
<email>
<default>
timeout = 60
debug = 0
subject = My subject
buffer = 100
interval = 300
prefix = "%T %H[%P] [%L] %S: "
debug_mode = 2
</default>
<admin>
host = foo.example
from = me@me.example
to = you@foo.example
maxlevel = error
minlevel = emergency
</admin>
<op>
host = bar.example
from = me@me.example
to = you@bar.example
maxlevel = warn
minlevel = emergency
</op>
</email>
</output>
PREREQUISITES
Carp
Params::Validate
UNIVERSAL::require
EXPORTS
No exports.
REPORT BUGS
Please report all bugs to <jschulz.cpan(at)bloonix.de>.
AUTHOR
Jonny Schulz <jschulz.cpan(at)bloonix.de>.
QUESTIONS
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.
TODO
* Log::Handler::Output::DBI
* Log::Handler::Output::Socket
COPYRIGHT
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.