The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Log::Handler::Config - The main config loader.

SYNOPSIS

    use Log::Handler;

    my $log = Log::Handler->new();

    $log->config(
        config  => 'file.conf',
        plugin  => 'YAML',
        section => 'section-name',
    );

Or

    use Log::Handler;
    use Log::Handler::Config;

    my $conf = Log::Handler::Config->config(
        config  => '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:

config

With this option you can pass a file name or the configuration as a hash reference.

    $log->config(config => 'file.conf');
    # or
    $log->config(config => \%config);

If you set a file name then the file extension is used to determine the configuration style:

    Config::General     -   cfg, conf 
    Config::Properties  -   props, jcfg, jconf
    YAML                -   yml, yaml
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

Examples:

    # use file.conf and YAML
    $log->config(
        config => 'file.conf',
        plugin => 'YAML'
    );

    # automatically use YAML
    $log->config(config => 'file.yaml');

    # automatically use Config::General
    $log->config(config => '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 logger section. You can load this section with

    $log->config(
        config  => '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 an alias. Later you get it with

    my $file_output = $log->get_output('mylog');

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
            message_layout = '%T %H[%P] [%L] %S: %m'
            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
        message_layout: '%T %H[%P] [%L] %S: %m'
        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.message_layout = '%T %H[%P] [%L] %S: %m'

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
                message_layout = "%T %H[%P] [%L] %S: %m"
                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(
        config  => '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
            message_layout = "%T %H[%P] [%L] %S: $m"
            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(config => '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
                    message_layout => '%T %H[%P] [%L] %S: %m',
                    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
                message_layout = "%T %H[%P] [%L] %S: %m"
                debug_mode     = 2
            </default>

            <common>
                filename = example.log
                maxlevel = info
                minlevel = warn
            </common>

            <error>
                filename = example-error.log
                maxlevel = warn
                minlevel = emergency
            </error>
        </file>
    </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.