ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Log.pm
(Generate patch)

Comparing AnyEvent/lib/AnyEvent/Log.pm (file contents):
Revision 1.28 by root, Thu Aug 25 00:08:10 2011 UTC vs.
Revision 1.32 by root, Thu Aug 25 04:56:16 2011 UTC

249 # now get raw message, unless we have it already 249 # now get raw message, unless we have it already
250 unless ($now) { 250 unless ($now) {
251 $format = $format->() if ref $format; 251 $format = $format->() if ref $format;
252 $format = sprintf $format, @args if @args; 252 $format = sprintf $format, @args if @args;
253 $format =~ s/\n$//; 253 $format =~ s/\n$//;
254 $now = AE::now; 254 $now = now;
255 }; 255 };
256 256
257 # format msg 257 # format msg
258 my $str = $ctx->[4] 258 my $str = $ctx->[4]
259 ? $ctx->[4]($now, $_[0], $level, $format) 259 ? $ctx->[4]($now, $_[0], $level, $format)
1012Configures the context to log to a file with the given path. Works like 1012Configures the context to log to a file with the given path. Works like
1013C<log_to_path>. 1013C<log_to_path>.
1014 1014
1015=item C<syslog> or C<syslog=>I<expr> 1015=item C<syslog> or C<syslog=>I<expr>
1016 1016
1017Configured the context to log to syslog. If I<expr> is given, then it is 1017Configures the context to log to syslog. If I<expr> is given, then it is
1018evaluated in the L<Sys::Syslog> package, so you could use: 1018evaluated in the L<Sys::Syslog> package, so you could use:
1019 1019
1020 log=syslog=LOG_LOCAL0 1020 log=syslog=LOG_LOCAL0
1021 1021
1022=item C<nolog> 1022=item C<nolog>
1064 filter=warn 1064 filter=warn
1065 1065
1066 # or, more verbose 1066 # or, more verbose
1067 filter=only,level,warn 1067 filter=only,level,warn
1068 1068
1069=item C<1>..C<9>, a logging level name (C<error>, C<debug> etc.) 1069=item C<1>..C<9> or a logging level name (C<error>, C<debug> etc.)
1070 1070
1071A numeric loglevel or the name of a loglevel will be interpreted according 1071A numeric loglevel or the name of a loglevel will be interpreted according
1072to the most recent C<only>, C<except> or C<level> directive. By default, 1072to the most recent C<only>, C<except> or C<level> directive. By default,
1073specifying a logging level enables that and any higher priority messages. 1073specifying a logging level enables that and any higher priority messages.
1074 1074
1075=item C<+>I<context> 1075=item C<+>I<context>
1076 1076
1077Adds/attaches the named context as slave to the context. 1077Attaches the named context as slave to the context.
1078 1078
1079=item C<+> 1079=item C<+>
1080 1080
1081A line C<+> clears the slave list form the context. Anonymous (C<%name>) 1081A line C<+> detaches all contexts, i.e. clears the slave list from the
1082contexts have no slaves by default, but package contexts have the parent 1082context. Anonymous (C<%name>) contexts have no attached slaves by default,
1083context as slave by default. 1083but package contexts have the parent context as slave by default.
1084 1084
1085Example: log messages from My::Module to a file, do not send them to the 1085Example: log messages from My::Module to a file, do not send them to the
1086default log collector. 1086default log collector.
1087 1087
1088 My::Module=+,file=/tmp/mymodulelog 1088 My::Module=+,file=/tmp/mymodulelog
1089 1089
1090=back 1090=back
1091 1091
1092Any character can be escaped by prefixing it with a C<\> (backslash), as
1093usual, so to log to a file containing a comma, colon, backslash and space in the
1094filename, you would do this:
1095
1096 PERL_ANYEVENT_LOG='log=file=/some\ \:file\ with\,\ \\-escapes'
1097
1098Since whitespace (which includes newlines) is allowed, it is fine to
1099specify multiple lines in C<PERL_ANYEVENT_LOG>, e.g.:
1100
1101 PERL_ANYEVENT_LOG="
1102 filter=warn
1103 AnyEvent::Debug=+%trace
1104 %trace=only,trace,+log
1105 " myprog
1106
1107Also, in the unlikely case when you want to concatenate specifications,
1108use whitespace as separator, as C<::> will be interpreted as part of a
1109module name, an empty spec with two separators:
1110
1111 PERL_ANYEVENT_LOG="$PERL_ANYEVENT_LOG MyMod=debug"
1112
1092=cut 1113=cut
1093 1114
1094for (my $spec = $ENV{PERL_ANYEVENT_LOG}) { 1115for (my $spec = $ENV{PERL_ANYEVENT_LOG}) {
1095 my %anon; 1116 my %anon;
1096 1117
1097 my $pkg = sub { 1118 my $pkg = sub {
1098 $_[0] eq "log" ? $LOG 1119 $_[0] eq "log" ? $LOG
1099 : $_[0] eq "filter" ? $FILTER 1120 : $_[0] eq "filter" ? $FILTER
1100 : $_[0] eq "collect" ? $COLLECT 1121 : $_[0] eq "collect" ? $COLLECT
1101 : $_[0] =~ /^%(.+)$/ && $anon{$1} ||= ctx undef 1122 : $_[0] =~ /^%(.+)$/ ? ($anon{$1} ||= ctx undef)
1102 : $_[0] =~ /^(.*?)(?:::)?$/ && ctx "$1" # egad :/ 1123 : $_[0] =~ /^(.*?)(?:::)?$/ ? ctx "$1" # egad :/
1124 : die # never reached?
1103 }; 1125 };
1104 1126
1127 /\G[[:space:]]+/gc; # skip initial whitespace
1128
1105 while (/\G((?:[^:=]+|::|\\.)+)=/gc) { 1129 while (/\G((?:[^:=[:space:]]+|::|\\.)+)=/gc) {
1106 my $ctx = $pkg->($1); 1130 my $ctx = $pkg->($1);
1107 my $level = "level"; 1131 my $level = "level";
1108 1132
1109 while (/\G((?:[^,:[:space:]]+|::|\\.)+)/gc) { 1133 while (/\G((?:[^,:[:space:]]+|::|\\.)+)/gc) {
1110 for ("$1") { 1134 for ("$1") {
1127 } 1151 }
1128 1152
1129 /\G,/gc or last; 1153 /\G,/gc or last;
1130 } 1154 }
1131 1155
1132 /\G[:[:space:]]/gc or last; 1156 /\G[:[:space:]]+/gc or last;
1133 } 1157 }
1158
1159 /\G[[:space:]]+/gc; # skip trailing whitespace
1134 1160
1135 if (/\G(.+)/g) { 1161 if (/\G(.+)/g) {
1136 die "PERL_ANYEVENT_LOG ($spec): parse error at '$1'\n"; 1162 die "PERL_ANYEVENT_LOG ($spec): parse error at '$1'\n";
1137 } 1163 }
1138} 1164}

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines