=head1 NAME

XLog::Formatter::Pattern - XLog pattern formatter backend



=head1 SYNPOSIS

    XLog::set_formatter(XLog::Formatter::Pattern->new("%1t %c[%L/%1M]%C %f:%l,%F(): %m"));
    XLog::warning("hi");


=head1 DESCRIPTION

Default formatter for XLog. Uses C<strftime>-like string syntax to format log messages. Format string is a string with a number of special tokens 
which will be replaced with additional information.

Some tokens supports up to 2 modifiers C<x> and C<y> in one of the following formats (given that C<T> is a token): %T or %xT or %x.yT or %.yT

If any of C<x> or C<y> are absent, it is considered 0 (for example C<%t> is the same as C<%0t> and C<%0.0t>).
If a token supports modifiers it will be noted below what C<x> and C<y> means.

=over

=item %L

Level string ("debug", "info", ...)

=item %M

Module name

=item %F

Function name

=item %f

Filename.

x=0: only filename

x=1: full path as it appeared during loading module (perl) or compilation (C)

=item %l

Line number

=item %m

Log message

x=0: normal behaviour

x=1: multiline message support. Each line of message will be "log-formatted" as if they all were written in log separately.

=item %t

Current time.

Modifier C<x> chooses time format, C<y> chooses microseconds precision

x=0: YYYY-MM-DD HH:MM:SS

x=1: YY-MM-DD HH:MM:SS

x=2: HH:MM:SS

x=3: YYYY/MM/DD HH:MM:SS

x=4: UNIX TIMESTAMP

y>0: high resolution time, adds fractional part after seconds with "y" digits precision

Examples:

    %t: 2020-01-31 23:59:59
    %2t: 23:59:59
    %2.3t: 23:59:59.345

=item %T

Current thread id. Usually makes sense only for C code or threaded perls.

=item %p

Current process id.

=item %P

Current process title. There is a trick, as for Perl interpreter it will always be C<perl>, which makes it senseless.
Instead, it spies on C<$0> and uses that value (transformed via decorator, see below) as process name.

=item %c

Start colored text. Inserts special control characters and all text after this token will be colored according to log level. Only for unix consoles.

=item %C

End colored text

=back



=head1 METHODS

=head4 new($format)

Create pattern formatter object

=head1 FUNCTIONS

=head4 set_program_decorator($callback)

Sets the callback, which will be invoked as

    $callback->($0)

to get process name for C<%P> in pattern above.

The callback is invoked only upon C<$0> changing.

If no decorator has been set, the default one is applied. It will cut script path in C<$0>, leaving only script basename, i.e.

    perl path/to/my_script.pl

the C<$0> will be set to C<path/to/my_script.pl> by default. The default decorator will cut it to:

    my_script.pl

=cut

1;
