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.33 by root, Thu Aug 25 04:58:07 2011 UTC

56The design goal behind this module was to keep it simple (and small), 56The design goal behind this module was to keep it simple (and small),
57but make it powerful enough to be potentially useful for any module, and 57but make it powerful enough to be potentially useful for any module, and
58extensive enough for the most common tasks, such as logging to multiple 58extensive enough for the most common tasks, such as logging to multiple
59targets, or being able to log into a database. 59targets, or being able to log into a database.
60 60
61The amount of documentation might indicate otherwise, but the module is 61The amount of documentation might indicate otherwise, but the runtime part
62still just below 300 lines of code. 62of the module is still just below 300 lines of code.
63 63
64=head1 LOGGING LEVELS 64=head1 LOGGING LEVELS
65 65
66Logging levels in this module range from C<1> (highest priority) to C<9> 66Logging levels in this module range from C<1> (highest priority) to C<9>
67(lowest priority). Note that the lowest numerical value is the highest 67(lowest priority). Note that the lowest numerical value is the highest
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 some
1094spaces in the filename, 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