NAME

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

SYNPOSIS

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

DESCRIPTION

Default formatter for XLog. Uses 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 x and y in one of the following formats (given that T is a token): %T or %xT or %x.yT or %.yT

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

%L

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

%M

Module name

%F

Function name

%f

Filename.

x=0: only filename

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

%l

Line number

%m

Log message

%t

Current time.

Modifier x chooses time format, 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
%T

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

%p

Current process id.

%P

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

%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.

%C

End colored text

METHODS

new($format)

Create pattern formatter object

FUNCTIONS

set_program_decorator($callback)

Sets the callback, which will be invoked as

$callback->($0)

to get process name for %P in pattern above.

The callback is invoked only upon $0 changing.

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

perl path/to/my_script.pl

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

my_script.pl