# NAME

Log::Minimal - Minimal but customizable logger.

# SYNOPSIS

    use Log::Minimal;

    critf("%s","foo"); # 2010-10-20T00:25:17 [CRITICAL] foo at example.pl line 12
    warnf("%d %s %s", 1, "foo", $uri);
    infof('foo');
    debugf("foo"); print if $ENV{LM_DEBUG} is true

    # with full stack trace
    critff("%s","foo");
    # 2010-10-20T00:25:17 [CRITICAL] foo at lib/Example.pm line 10, example.pl line 12
    warnff("%d %s %s", 1, "foo", $uri);
    infoff('foo');
    debugff("foo"); print if $ENV{LM_DEBUG} is true

    my $serialize = ddf({ 'key' => 'value' });

    # die with formatted message
    croakf('foo');
    croakff('%s %s', $code, $message);

# DESCRIPTION

Log::Minimal is Minimal but customizable log module.

# EXPORT FUNCTIONS

- critf(($message:Str|$format:Str,@list:Array));

        critf("could't connect to example.com");
        critf("Connection timeout timeout:%d, host:%s", 2, "example.com");

    Display CRITICAL messages.
    When two or more arguments are passed to the function, 
    the first argument is treated as a format of printf. 

        local $Log::Minimal::AUTODUMP = 1;
        critf({ foo => 'bar' });
        critf("dump is %s", { foo => 'bar' });

    If $Log::Minimal::AUTODUMP is true, reference or object message is serialized with 
    Data::Dumper automatically.

- warnf(($message:Str|$format:Str,@list:Array));

    Display WARN messages.

- infof(($message:Str|$format:Str,@list:Array));

    Display INFO messages.

- debugf(($message:Str|$format:Str,@list:Array));

    Display DEBUG messages, if $ENV{LM\_DEBUG} is true.

- critff(($message:Str|$format:Str,@list:Array));

        critff("could't connect to example.com");
        critff("Connection timeout timeout:%d, host:%s", 2, "example.com");

    Display CRITICAL messages with stack trace.

- warnff(($message:Str|$format:Str,@list:Array));

    Display WARN messages with stack trace.

- infoff(($message:Str|$format:Str,@list:Array));

    Display INFO messages with stack trace.

- debugff(($message:Str|$format:Str,@list:Array));

    Display DEBUG messages with stack trace, if $ENV{LM\_DEBUG} is true.

- croakf(($message:Str|$format:Str,@list:Array));

    die with formatted $message

        croakf("critical error");
        # 2011-06-10T16:27:26 [ERROR] critical error at sample.pl line 23

- croakff(($message:Str|$format:Str,@list:Array));

    die with formatted $message with stack trace

- ddf($value:Any)

    Utility method that serializes given value with Data::Dumper;

        my $serialize = ddf($hashref);



# ENVIRONMENT VALUE

- $ENV{LM\_DEBUG}

    To print debugf and debugff messages, $ENV{LM\_DEBUG} must be true.

    You can change variable name from LM\_DEBUG to arbitrary string which is specified by "env\_debug" in use line. Changed variable name affects only in package locally.

        use Log::Minimal env_debug => 'FOO_DEBUG';
        

        $ENV{LM_DEBUG}  = 1;
        $ENV{FOO_DEBUG} = 0;
        debugf("hello"); # no output
        

        $ENV{FOO_DEBUG} = 1;
        debugf("world"); # print message

- $ENV{LM\_COLOR}

    $ENV{LM\_COLOR} is used as default value of $Log::Minimal::COLOR

- $ENV{LM\_DEFAULT\_COLOR}

    $ENV{LM\_DEFAULT\_COLOR} is used as default value of $Log::Minimal::DEFAULT\_COLOR

    Format of value is "LEVEL=FG;BG:LEVEL=FG;BG:...". "FG" and "BG" are optional.

    For example:

        export LM_DEFAULT_COLOR='debug=red:info=;cyan:critical=yellow;red'

# CUSTOMIZE

- $Log::Minimal::COLOR

    Coloring log messages. Disabled by default.

- $Log::Minimal::PRINT

    To change the method of outputting the log, set $Log::Minimal::PRINT.

        # with PSGI Application. output log with request uri.
        my $app = sub {
            my $env = shift;
            local $Log::Minimal::PRINT = sub {
                my ( $time, $type, $message, $trace,$raw_message) = @_;
                $env->{psgi.errors}->print(
                    "$time [$env->{SCRIPT_NAME}] [$type] $message at $trace\n");
            };
            run_app(...);
        }

    $message includes color sequences, If you want raw message text, use $raw\_message.
    default is

        sub {
          my ( $time, $type, $message, $trace,$raw_message) = @_;
          warn "$time [$type] $message at $trace\n";
        }

- $Log::Minimal::DIE

    To change the format of die message, set $Log::Minimal::DIE.

        local $Log::Minimal::PRINT = sub {
            my ( $time, $type, $message, $trace) = @_;
            die "[$type] $message at $trace\n"; # not need time
        };

    default is

        sub {
          my ( $time, $type, $message, $trace) = @_;
          die "$time [$type] $message at $trace\n";
        }

- $Log::Minimal::LOG\_LEVEL

    Set level to output log.

        local $Log::Minimal::LOG_LEVEL = "WARN";
        infof("foo"); #print nothing
        warnf("foo");

    Support levels are DEBUG,INFO,WARN,CRITICAL and NONE.
    If NONE is set, no output except croakf and croakff. Default log level is DEBUG.

- $Log::Minimal::AUTODUMP

    Serialize message with Data::Dumper.

        warnf("%s",{ foo => bar}); # HASH(0x100804ed0)

        local $Log::Minimal::AUTODUMP = 1;
        warnf("dump is %s", {foo=>'bar'}); #dump is {foo=>'bar'}

        my $uri = URI->new("http://search.cpan.org/");
        warnf("uri: '%s'", $uri); # uri: 'http://search.cpan.org/'

    If message is object and has overload methods like '""' or '0+', 
    Log::Minimal uses it instead of Data::Dumper.

- $Log::Minimal::TRACE\_LEVEL

    Like a $Carp::CarpLevel, this variable determines how many additional call frames are to be skipped.
    Defaults to 0.

- $Log::Minimal::ESCAPE\_WHITESPACE

    If this value is true, whitespace other than space will be represented as \[\\n\\t\\r\].
    Defaults to 0.

# AUTHOR

Masahiro Nagano <kazeburo {at} gmail.com>

# THANKS TO

Yuji Shimada (xaicron)

Yoshihiro Sugi (sugyan)

# SEE ALSO

# LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.