6 use POSIX qw(strftime);
12 return "\e[1m0\e[0m" if $port == 0;
14 my $c = ( $port % 6 ) + 31;
15 return "\e[${c}m$port\e[0m";
19 my $log = $ENV{SLICE} ? "$ENV{SLICE}/log/" : '/tmp/';
21 my ( $ss,$mm,$hh, $d,$m,$yyyy ) = localtime(time());
25 $log .= sprintf("%04d-%02d-%02d.", $yyyy, $m, $d );
27 $log .= $ENV{NAME} ? $ENV{NAME} : $1 if $0 =~ m{([^/]+)$};
29 my $line = join(' ', @_);
30 if ( $line =~ s{^(?:\e\[\d+m)*(\d\d\d\d)\W(\d\d)\W(\d\d) (\d\d:\d\d:\d\d)}{$1-$2-$3 $4} ) {
31 # have timestamp allready
33 my $time = sprintf("%04d-%02d-%02d %02d:%02d:%02d", $yyyy,$m,$d, $hh,$mm,$ss);
34 $line = "$time $line";
37 $line =~ s/[\r\n]+$/\n/;
39 print STDERR "creating $log\n" unless -e $log;
41 if ( open(my $fh, '>>', $log) ) {
49 if ( -t STDOUT ) { # colorize only if run from terminal !
51 $SIG{__WARN__} = sub {
53 my $msg = join('', @_);
54 if ( $msg =~ s{ line (\d+)\.}{ +$1} ) {
55 $msg =~ s{^(.+)( at .+)}{\e[31m$1\e[0m$2} if $msg !~ m{^#};
57 $msg =~ s{\[(\d+)\]}{ '[' . port2color($1) . ']' }eg;
58 $msg =~ s{(\||=>)}{\e[34m$1\e[0m}g; # blue
59 $msg =~ s{(["\{\}\#])}{\e[33m$1\e[0m}g; # yellow
60 __log $msg unless $msg =~ m{^#} && ! $ENV{DEBUG};
66 $SIG{__WARN__} = sub {
72 # We're in an eval {} and don't want log
73 # this message but catch it later