1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
use warnings;
use strict;
use Test::More;
use Socket;
use Log::Fast;
if ($^O =~ /Win/xms) {
plan skip_all => 'not availaible on Windows';
} else {
plan tests => 19;
}
use constant PATH => "/tmp/log.$$.sock";
socket my $Srv, AF_UNIX, SOCK_DGRAM, 0 or die "socket: $!";
bind $Srv, sockaddr_un(PATH) or die "bind: $!";
END { unlink PATH }
sub _log() { sysread $Srv, my $buf, 8192 or die "sysread: $!"; return $buf }
our $LOG = Log::Fast->new({
type => 'unix',
path => PATH,
});
my $H = qr/\A<11>\w\w\w [ \d]\d \d\d:\d\d:\d\d syslog\.t\[$$\]:/ms;
$LOG->ERR('msg');
like _log, qr/$H msg\z/ms, 'defaults';
$LOG->config({
add_timestamp => 0,
add_hostname => 0,
add_pid => 0,
});
$H = qr/\A<11>syslog\.t:/ms;
$LOG->ERR('msg');
like _log, qr/$H msg\z/ms, 'minimum features';
$H = qr/\A<12>syslog\.t:/ms;
$LOG->WARN('msg');
like _log, qr/$H msg\z/ms, 'levels: WARN';
$H = qr/\A<13>syslog\.t:/ms;
$LOG->NOTICE('msg');
like _log, qr/$H msg\z/ms, 'levels: NOTICE';
$H = qr/\A<14>syslog\.t:/ms;
$LOG->INFO('msg');
like _log, qr/$H msg\z/ms, 'levels: INFO';
$H = qr/\A<15>syslog\.t:/ms;
$LOG->DEBUG('msg');
like _log, qr/$H msg\z/ms, 'levels: DEBUG';
use Sys::Syslog qw( LOG_DAEMON LOG_AUTH LOG_USER );
$LOG->config({ facility => LOG_DAEMON });
$H = qr/\A<27>syslog\.t:/ms;
$LOG->ERR('msg');
like _log, qr/$H msg\z/ms, 'facilities: daemon';
$LOG->config({ facility => LOG_AUTH });
$H = qr/\A<35>syslog\.t:/ms;
$LOG->ERR('msg');
like _log, qr/$H msg\z/ms, 'facilities: auth';
$LOG->config({ facility => LOG_USER });
$H = qr/\A<11>syslog\.t:/ms;
$LOG->ERR('msg');
like _log, qr/$H msg\z/ms, 'facilities: user';
$LOG->config({ add_timestamp => 1 });
$H = qr/\A<11>\w\w\w [ \d]\d \d\d:\d\d:\d\d syslog\.t:/ms;
$LOG->ERR('msg');
like _log, qr/$H msg\z/ms, 'feature: timestamp';
$LOG->config({ add_timestamp => 0 });
use Sys::Hostname;
$LOG->config({ add_hostname => 1 });
$H = qr/\A<11>\Q${\ hostname }\E syslog\.t:/ms;
$LOG->ERR('msg');
like _log, qr/$H msg\z/ms, 'feature: hostname (default)';
$LOG->config({ hostname => 'myhost' });
$H = qr/\A<11>myhost syslog\.t:/ms;
$LOG->ERR('msg');
like _log, qr/$H msg\z/ms, 'feature: hostname (user-defined)';
$LOG->config({ add_hostname => 0 });
$LOG->ident('myapp');
$H = qr/\A<11>myapp:/ms;
$LOG->ERR('msg');
like _log, qr/$H msg\z/ms, 'ident';
is $LOG->ident(), 'myapp', 'current ident without change';
is $LOG->ident('myapp2'), 'myapp', 'previous ident on change';
is $LOG->ident('myapp'), 'myapp2', 'previous ident on change';
$LOG->config({ add_pid => 1 });
$H = qr/\A<11>myapp\[$$\]:/ms;
$LOG->ERR('msg');
like _log, qr/$H msg\z/ms, 'feature: pid (default)';
$LOG->config({ pid => 31337 });
$H = qr/\A<11>myapp\[31337\]:/ms;
$LOG->ERR('msg');
like _log, qr/$H msg\z/ms, 'feature: pid (user-defined)';
$LOG->config({ add_pid => 0 });
$LOG->config({
prefix => '%S %D %T [%L]%_%P->%F %%',
facility => LOG_DAEMON,
add_timestamp => 1,
add_hostname => 1,
hostname => 'somehost',
ident => 'тест',
add_pid => 1,
pid => 65535,
});
$H = qr/\A<31>\w\w\w [ \d]\d \d\d:\d\d:\d\d somehost тест\[65535\]:/ms;
my $P = qr/\d+\.\d{5} 20\d\d-\d\d-\d\d \d\d:\d\d:\d\d \[DEBUG\] main-> %/ms;
$LOG->DEBUG('сообщение');
my $msg = _log;
utf8::decode($msg);
like $msg, qr/$H ${P}сообщение\z/ms, 'everything (prefix, features, unicode)';
|