Log::Tiny - Log data with as little code as possible


Version 1.1


This module aims to be a light-weight implementation *similiar* to Log::Log4perl for logging data to a file.

Its use is very straight forward:

    use Log::Tiny;

    my $log = Log::Tiny->new( 'myapp.log' ) or 
      die 'Could not log! (' . Log::Tiny->errstr . ')';

    foreach ( 1 .. 20 ) { 
        $log->DEBUG( "Performing extensive computations on $_" ) if $DEBUG;
        unless ( extensively_compute( $_ ) ) {
                "Investigating error (this may take a while)..." 
            $log->ERROR( find_error() );
            exit 1;
        } else {
            $log->INFO( "Everything's A-OK!" );



Create a new Log::Tiny object. You must define a log file to append to, and, optionally, a format.


You may, at any time, change the format. The log format is similiar in style to the sprintf you know and love; and, as a peek inside the source of this module will tell you, sprintf is used internally. However, be advised that these log formats are not sprintf.

Interpolated data are specified by an percent sign ( % ), followed by a character. A literal percent sign can be specified via two in succession ( %% ). You may use any of the formatting attributes as noted in perlfunc, under "sprintf" (perldoc -f sprintf).

Internally, the format routine uses a data structure (hash) that can be seen near the beggining of this package. Any unrecognized interpolation variables will be returned literally. This means that, assuming $format{d} does not exist, "%d" in your format will result in "%d" being outputted to the log file. No interpolation will occur.

You may, of course, decide to modify the format data structure. I have done my best to ensure a wide range of variables for your usage, however. They are (currently) as follows:

    c => category       => The method called (see below for more info)
    C => lcategory      => lowercase category
    f => program_file   => Value of $0
    F => caller_file    => Calling file
    g => gmtime         => Output of scalar L<gmtime> (localized date string)
    L => caller_line    => Calling line
    m => message        => Message sent to the log method
    n => newline        => Value of $/
    o => osname         => Value of $^O
    p => pid            => Value of $$
    P => caller_pkg     => Calling package
    r => runtime        => Seconds the current process has been running for
    S => caller_sub     => Calling subroutine
    t => localtime      => Output of scalar L<localtime> (localized date 
    T => unix_time      => Time since epoch (L<time>)
    u => effective_uid  => Value of $>
    U => real_uid       => Value of $<
    v => long_perl_ver  => Value of $] (5.008008)
    V => short_perl_ver => A "short" string for the version ("5.8.8")

See perlvar for information on the used global variables, and perlfunc (under "caller") or perldoc -f caller for information on the "calling" variables. Oh, and make sure you add %n if you want newines.

WHATEVER_YOU_WANT (log a message)

This method is whatever you want it to be. Any method called on a Log::Tiny object that is not reserved will be considered an attempt to log in the category named the same as the method that was caleld. Currently, only in-use methods are reserved; However, to account for expansion, please only use uppercase categories. See formats above for information on customizing the log messages.


Called as a class method, Log::Tiny-errstr > reveals the error that Log::Tiny encountered in creation or invocation.


Log only the given categories


Jordan M. Adler, <jmadler at>


Please report any bugs or feature requests to bug-log-tiny at, or through the web interface at I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.


You can find documentation for this module with the perldoc command.

    perldoc Log::Tiny

You can also look for information at:


Much thanks to Michael Schilli CPAN:mschilli for his great work on Log::Log4perl, of which this module's formatting concept is largely based upon.


Copyright 2007-2022 Jordan M. Adler, all rights reserved.

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