ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Log.pm
Revision: 1.53
Committed: Tue Mar 27 16:21:11 2012 UTC (12 years, 2 months ago) by root
Branch: MAIN
Changes since 1.52: +2 -2 lines
Log Message:
put 1; to the end of .pm files

File Contents

# User Rev Content
1 root 1.1 =head1 NAME
2    
3     AnyEvent::Log - simple logging "framework"
4    
5     =head1 SYNOPSIS
6    
7 root 1.25 Simple uses:
8 root 1.24
9 root 1.8 use AnyEvent;
10    
11 root 1.51 AE::log fatal => "no config found, cannot continue"; # never returns
12     AE::log alert => "the battery died";
13     AE::log crit => "the battery temperature is too hot";
14     AE::log error => "division by zero attempted";
15     AE::log warn => "couldn't delete the file";
16     AE::log note => "wanted to create config, but config already exists";
17     AE::log info => "file soandso successfully deleted";
18     AE::log debug => "the function returned 3";
19 root 1.44 AE::log trace => "going to call function abc";
20 root 1.8
21 root 1.44 Log level overview:
22 root 1.41
23 root 1.44 LVL NAME SYSLOG PERL NOTE
24     1 fatal emerg exit system unusable, aborts program!
25     2 alert failure in primary system
26     3 critical crit failure in backup system
27     4 error err die non-urgent program errors, a bug
28     5 warn warning possible problem, not necessarily error
29     6 note notice unusual conditions
30     7 info normal messages, no action required
31     8 debug debugging messages for development
32     9 trace copious tracing output
33    
34     "Complex" uses (for speed sensitive code, e.g. trace/debug messages):
35 root 1.24
36 root 1.1 use AnyEvent::Log;
37    
38 root 1.8 my $tracer = AnyEvent::Log::logger trace => \$my $trace;
39    
40     $tracer->("i am here") if $trace;
41     $tracer->(sub { "lots of data: " . Dumper $self }) if $trace;
42    
43 root 1.25 Configuration (also look at the EXAMPLES section):
44 root 1.10
45 root 1.18 # set logging for the current package to errors and higher only
46 root 1.16 AnyEvent::Log::ctx->level ("error");
47 root 1.10
48 root 1.23 # set logging level to suppress anything below "notice"
49 root 1.18 $AnyEvent::Log::FILTER->level ("notice");
50 root 1.10
51 root 1.23 # send all critical and higher priority messages to syslog,
52     # regardless of (most) other settings
53     $AnyEvent::Log::COLLECT->attach (new AnyEvent::Log::Ctx
54     level => "critical",
55 root 1.40 log_to_syslog => "user",
56 root 1.23 );
57    
58 root 1.1 =head1 DESCRIPTION
59    
60 root 1.2 This module implements a relatively simple "logging framework". It doesn't
61     attempt to be "the" logging solution or even "a" logging solution for
62     AnyEvent - AnyEvent simply creates logging messages internally, and this
63     module more or less exposes the mechanism, with some extra spiff to allow
64     using it from other modules as well.
65    
66 root 1.51 Remember that the default verbosity level is C<4> (C<error>), so only
67     errors and more important messages will be logged, unless you set
68     C<PERL_ANYEVENT_VERBOSE> to a higher number before starting your program
69     (C<AE_VERBOSE=5> is recommended during development), or change the logging
70     level at runtime with something like:
71 root 1.2
72 root 1.18 use AnyEvent::Log;
73 root 1.34 $AnyEvent::Log::FILTER->level ("info");
74 root 1.2
75 root 1.10 The design goal behind this module was to keep it simple (and small),
76     but make it powerful enough to be potentially useful for any module, and
77     extensive enough for the most common tasks, such as logging to multiple
78     targets, or being able to log into a database.
79    
80 root 1.36 The module is also usable before AnyEvent itself is initialised, in which
81     case some of the functionality might be reduced.
82    
83 root 1.33 The amount of documentation might indicate otherwise, but the runtime part
84     of the module is still just below 300 lines of code.
85 root 1.18
86     =head1 LOGGING LEVELS
87    
88     Logging levels in this module range from C<1> (highest priority) to C<9>
89     (lowest priority). Note that the lowest numerical value is the highest
90     priority, so when this document says "higher priority" it means "lower
91     numerical value".
92    
93     Instead of specifying levels by name you can also specify them by aliases:
94    
95     LVL NAME SYSLOG PERL NOTE
96 root 1.42 1 fatal emerg exit system unusable, aborts program!
97     2 alert failure in primary system
98     3 critical crit failure in backup system
99     4 error err die non-urgent program errors, a bug
100     5 warn warning possible problem, not necessarily error
101     6 note notice unusual conditions
102     7 info normal messages, no action required
103     8 debug debugging messages for development
104     9 trace copious tracing output
105 root 1.18
106     As you can see, some logging levels have multiple aliases - the first one
107     is the "official" name, the second one the "syslog" name (if it differs)
108 root 1.41 and the third one the "perl" name, suggesting (only!) that you log C<die>
109 root 1.42 messages at C<error> priority. The NOTE column tries to provide some
110     rationale on how to chose a logging level.
111    
112 root 1.48 As a rough guideline, levels 1..3 are primarily meant for users of the
113     program (admins, staff), and are the only ones logged to STDERR by
114 root 1.42 default. Levels 4..6 are meant for users and developers alike, while
115     levels 7..9 are usually meant for developers.
116 root 1.18
117 root 1.48 You can normally only log a message once at highest priority level (C<1>,
118     C<fatal>), because logging a fatal message will also quit the program - so
119     use it sparingly :)
120 root 1.18
121 root 1.51 For example, a program that finds an unknown switch on the commandline
122     might well use a fatal logging level to tell users about it - the "system"
123     in this case would be the program, or module.
124    
125 root 1.18 Some methods also offer some extra levels, such as C<0>, C<off>, C<none>
126 root 1.48 or C<all> - these are only valid for the methods that documented them.
127 root 1.14
128 root 1.9 =head1 LOGGING FUNCTIONS
129 root 1.2
130 root 1.48 The following functions allow you to log messages. They always use the
131     caller's package as a "logging context". Also, the main logging function,
132     C<log>, is aliased to C<AnyEvent::log> and C<AE::log> when the C<AnyEvent>
133     module is loaded.
134 root 1.1
135     =over 4
136    
137     =cut
138    
139     package AnyEvent::Log;
140    
141 root 1.2 use Carp ();
142 root 1.1 use POSIX ();
143    
144 root 1.45 # layout of a context
145     # 0 1 2 3 4, 5
146     # [$title, $level, %$slaves, &$logcb, &$fmtcb, $cap]
147    
148 root 1.1 use AnyEvent (); BEGIN { AnyEvent::common_sense }
149 root 1.37 #use AnyEvent::Util (); need to load this in a delayed fashion, as it uses AE::log
150 root 1.1
151 root 1.14 our $VERSION = $AnyEvent::VERSION;
152    
153 root 1.18 our ($COLLECT, $FILTER, $LOG);
154    
155 root 1.2 our ($now_int, $now_str1, $now_str2);
156    
157     # Format Time, not public - yet?
158     sub ft($) {
159     my $i = int $_[0];
160     my $f = sprintf "%06d", 1e6 * ($_[0] - $i);
161    
162     ($now_int, $now_str1, $now_str2) = ($i, split /\x01/, POSIX::strftime "%Y-%m-%d %H:%M:%S.\x01 %z", localtime $i)
163     if $now_int != $i;
164    
165     "$now_str1$f$now_str2"
166     }
167    
168 root 1.18 our %CTX; # all package contexts
169 root 1.3
170 root 1.8 # creates a default package context object for the given package
171     sub _pkg_ctx($) {
172 root 1.10 my $ctx = bless [$_[0], (1 << 10) - 1 - 1, {}], "AnyEvent::Log::Ctx";
173 root 1.8
174     # link "parent" package
175 root 1.18 my $parent = $_[0] =~ /^(.+)::/
176     ? $CTX{$1} ||= &_pkg_ctx ("$1")
177     : $COLLECT;
178 root 1.8
179 root 1.18 $ctx->[2]{$parent+0} = $parent;
180 root 1.8
181     $ctx
182     }
183    
184 root 1.2 =item AnyEvent::Log::log $level, $msg[, @args]
185    
186 root 1.22 Requests logging of the given C<$msg> with the given log level, and
187     returns true if the message was logged I<somewhere>.
188 root 1.2
189 root 1.41 For loglevel C<fatal>, the program will abort.
190 root 1.2
191     If only a C<$msg> is given, it is logged as-is. With extra C<@args>, the
192     C<$msg> is interpreted as an sprintf format string.
193    
194     The C<$msg> should not end with C<\n>, but may if that is convenient for
195     you. Also, multiline messages are handled properly.
196    
197 root 1.3 Last not least, C<$msg> might be a code reference, in which case it is
198     supposed to return the message. It will be called only then the message
199     actually gets logged, which is useful if it is costly to create the
200     message in the first place.
201 root 1.2
202 root 1.46 This function takes care of saving and restoring C<$!> and C<$@>, so you
203     don't have to.
204    
205 root 1.2 Whether the given message will be logged depends on the maximum log level
206 root 1.22 and the caller's package. The return value can be used to ensure that
207     messages or not "lost" - for example, when L<AnyEvent::Debug> detects a
208     runtime error it tries to log it at C<die> level, but if that message is
209     lost it simply uses warn.
210 root 1.2
211     Note that you can (and should) call this function as C<AnyEvent::log> or
212 root 1.8 C<AE::log>, without C<use>-ing this module if possible (i.e. you don't
213     need any additional functionality), as those functions will load the
214     logging module on demand only. They are also much shorter to write.
215    
216 root 1.11 Also, if you optionally generate a lot of debug messages (such as when
217 root 1.8 tracing some code), you should look into using a logger callback and a
218     boolean enabler (see C<logger>, below).
219 root 1.2
220 root 1.3 Example: log something at error level.
221    
222     AE::log error => "something";
223    
224     Example: use printf-formatting.
225    
226     AE::log info => "%5d %-10.10s %s", $index, $category, $msg;
227    
228     Example: only generate a costly dump when the message is actually being logged.
229    
230     AE::log debug => sub { require Data::Dump; Data::Dump::dump \%cache };
231    
232 root 1.2 =cut
233    
234     # also allow syslog equivalent names
235     our %STR2LEVEL = (
236 root 1.18 fatal => 1, emerg => 1, exit => 1,
237 root 1.2 alert => 2,
238     critical => 3, crit => 3,
239 root 1.18 error => 4, err => 4, die => 4,
240 root 1.2 warn => 5, warning => 5,
241     note => 6, notice => 6,
242     info => 7,
243     debug => 8,
244     trace => 9,
245     );
246    
247 root 1.38 our $TIME_EXACT;
248    
249     sub exact_time($) {
250     $TIME_EXACT = shift;
251     *_ts = $AnyEvent::MODEL
252     ? $TIME_EXACT ? \&AE::now : \&AE::time
253     : sub () { $TIME_EXACT ? do { require Time::HiRes; Time::HiRes::time () } : time };
254     }
255    
256     BEGIN {
257     exact_time 0;
258     }
259 root 1.10
260 root 1.4 AnyEvent::post_detect {
261 root 1.38 exact_time $TIME_EXACT;
262 root 1.4 };
263    
264 root 1.2 our @LEVEL2STR = qw(0 fatal alert crit error warn note info debug trace);
265    
266 root 1.8 # time, ctx, level, msg
267     sub _format($$$$) {
268 root 1.11 my $ts = ft $_[0];
269     my $ct = " ";
270    
271 root 1.10 my @res;
272 root 1.8
273 root 1.10 for (split /\n/, sprintf "%-5s %s: %s", $LEVEL2STR[$_[2]], $_[1][0], $_[3]) {
274 root 1.11 push @res, "$ts$ct$_\n";
275     $ct = " + ";
276 root 1.10 }
277    
278     join "", @res
279 root 1.8 }
280    
281 root 1.43 sub fatal_exit() {
282     exit 1;
283     }
284    
285 root 1.3 sub _log {
286 root 1.8 my ($ctx, $level, $format, @args) = @_;
287 root 1.2
288 root 1.11 $level = $level > 0 && $level <= 9
289     ? $level+0
290     : $STR2LEVEL{$level} || Carp::croak "$level: not a valid logging level, caught";
291 root 1.2
292 root 1.8 my $mask = 1 << $level;
293 root 1.2
294 root 1.45 my ($success, %seen, @ctx, $now, @fmt);
295 root 1.8
296 root 1.11 do
297     {
298 root 1.45 # if !ref, then it's a level number
299     if (!ref $ctx) {
300     $level = $ctx;
301     } elsif ($ctx->[1] & $mask and !$seen{$ctx+0}++) {
302     # logging/recursing into this context
303    
304     # level cap
305     if ($ctx->[5] > $level) {
306     push @ctx, $level; # restore level when going up in tree
307     $level = $ctx->[5];
308     }
309    
310     # log if log cb
311 root 1.11 if ($ctx->[3]) {
312     # logging target found
313    
314 root 1.46 local ($!, $@);
315    
316 root 1.11 # now get raw message, unless we have it already
317     unless ($now) {
318     $format = $format->() if ref $format;
319     $format = sprintf $format, @args if @args;
320     $format =~ s/\n$//;
321 root 1.38 $now = _ts;
322 root 1.11 };
323    
324     # format msg
325     my $str = $ctx->[4]
326     ? $ctx->[4]($now, $_[0], $level, $format)
327 root 1.45 : ($fmt[$level] ||= _format $now, $_[0], $level, $format);
328 root 1.11
329 root 1.22 $success = 1;
330    
331 root 1.21 $ctx->[3]($str)
332 root 1.18 or push @ctx, values %{ $ctx->[2] }; # not consumed - propagate
333     } else {
334     push @ctx, values %{ $ctx->[2] }; # not masked - propagate
335 root 1.11 }
336     }
337 root 1.8 }
338 root 1.11 while $ctx = pop @ctx;
339 root 1.2
340 root 1.43 fatal_exit if $level <= 1;
341 root 1.22
342     $success
343 root 1.2 }
344    
345 root 1.3 sub log($$;@) {
346 root 1.8 _log
347     $CTX{ (caller)[0] } ||= _pkg_ctx +(caller)[0],
348     @_;
349 root 1.3 }
350    
351     =item $logger = AnyEvent::Log::logger $level[, \$enabled]
352    
353     Creates a code reference that, when called, acts as if the
354 root 1.22 C<AnyEvent::Log::log> function was called at this point with the given
355 root 1.3 level. C<$logger> is passed a C<$msg> and optional C<@args>, just as with
356     the C<AnyEvent::Log::log> function:
357    
358     my $debug_log = AnyEvent::Log::logger "debug";
359    
360     $debug_log->("debug here");
361     $debug_log->("%06d emails processed", 12345);
362     $debug_log->(sub { $obj->as_string });
363    
364     The idea behind this function is to decide whether to log before actually
365     logging - when the C<logger> function is called once, but the returned
366     logger callback often, then this can be a tremendous speed win.
367    
368     Despite this speed advantage, changes in logging configuration will
369     still be reflected by the logger callback, even if configuration changes
370     I<after> it was created.
371    
372     To further speed up logging, you can bind a scalar variable to the logger,
373     which contains true if the logger should be called or not - if it is
374     false, calling the logger can be safely skipped. This variable will be
375     updated as long as C<$logger> is alive.
376    
377     Full example:
378    
379     # near the init section
380     use AnyEvent::Log;
381    
382     my $debug_log = AnyEvent:Log::logger debug => \my $debug;
383    
384     # and later in your program
385     $debug_log->("yo, stuff here") if $debug;
386    
387     $debug and $debug_log->("123");
388    
389     =cut
390    
391     our %LOGGER;
392    
393     # re-assess logging status for all loggers
394     sub _reassess {
395 root 1.17 local $SIG{__DIE__};
396     my $die = sub { die };
397    
398 root 1.3 for (@_ ? $LOGGER{$_[0]} : values %LOGGER) {
399 root 1.8 my ($ctx, $level, $renabled) = @$_;
400 root 1.3
401 root 1.17 # to detect whether a message would be logged, we actually
402 root 1.11 # try to log one and die. this isn't fast, but we can be
403 root 1.3 # sure that the logging decision is correct :)
404    
405     $$renabled = !eval {
406 root 1.17 _log $ctx, $level, $die;
407 root 1.3
408     1
409     };
410     }
411     }
412    
413 root 1.15 sub _logger {
414 root 1.8 my ($ctx, $level, $renabled) = @_;
415 root 1.3
416     $$renabled = 1;
417    
418 root 1.8 my $logger = [$ctx, $level, $renabled];
419 root 1.3
420     $LOGGER{$logger+0} = $logger;
421    
422     _reassess $logger+0;
423    
424 root 1.43 require AnyEvent::Util unless $AnyEvent::Util::VERSION;
425 root 1.37 my $guard = AnyEvent::Util::guard (sub {
426 root 1.3 # "clean up"
427     delete $LOGGER{$logger+0};
428 root 1.37 });
429 root 1.3
430     sub {
431     $guard if 0; # keep guard alive, but don't cause runtime overhead
432    
433 root 1.8 _log $ctx, $level, @_
434 root 1.3 if $$renabled;
435     }
436     }
437    
438 root 1.8 sub logger($;$) {
439     _logger
440     $CTX{ (caller)[0] } ||= _pkg_ctx +(caller)[0],
441     @_
442     }
443    
444 root 1.38 =item AnyEvent::Log::exact_time $on
445    
446     By default, C<AnyEvent::Log> will use C<AE::now>, i.e. the cached
447     eventloop time, for the log timestamps. After calling this function with a
448     true value it will instead resort to C<AE::time>, i.e. fetch the current
449     time on each log message. This only makes a difference for event loops
450     that actually cache the time (such as L<EV> or L<AnyEvent::Loop>).
451    
452 root 1.39 This setting can be changed at any time by calling this function.
453    
454 root 1.38 Since C<AnyEvent::Log> has to work even before the L<AnyEvent> has been
455     initialised, this switch will also decide whether to use C<CORE::time> or
456     C<Time::HiRes::time> when logging a message before L<AnyEvent> becomes
457     available.
458    
459 root 1.2 =back
460    
461 root 1.9 =head1 LOGGING CONTEXTS
462 root 1.2
463 root 1.9 This module associates every log message with a so-called I<logging
464     context>, based on the package of the caller. Every perl package has its
465     own logging context.
466 root 1.8
467 root 1.10 A logging context has three major responsibilities: filtering, logging and
468     propagating the message.
469 root 1.9
470 root 1.10 For the first purpose, filtering, each context has a set of logging
471     levels, called the log level mask. Messages not in the set will be ignored
472     by this context (masked).
473    
474     For logging, the context stores a formatting callback (which takes the
475     timestamp, context, level and string message and formats it in the way
476     it should be logged) and a logging callback (which is responsible for
477     actually logging the formatted message and telling C<AnyEvent::Log>
478     whether it has consumed the message, or whether it should be propagated).
479 root 1.9
480 root 1.18 For propagation, a context can have any number of attached I<slave
481 root 1.10 contexts>. Any message that is neither masked by the logging mask nor
482 root 1.18 masked by the logging callback returning true will be passed to all slave
483 root 1.10 contexts.
484 root 1.9
485 root 1.11 Each call to a logging function will log the message at most once per
486     context, so it does not matter (much) if there are cycles or if the
487     message can arrive at the same context via multiple paths.
488    
489 root 1.9 =head2 DEFAULTS
490    
491 root 1.10 By default, all logging contexts have an full set of log levels ("all"), a
492 root 1.9 disabled logging callback and the default formatting callback.
493    
494     Package contexts have the package name as logging title by default.
495    
496 root 1.18 They have exactly one slave - the context of the "parent" package. The
497 root 1.9 parent package is simply defined to be the package name without the last
498     component, i.e. C<AnyEvent::Debug::Wrapped> becomes C<AnyEvent::Debug>,
499 root 1.18 and C<AnyEvent> becomes ... C<$AnyEvent::Log::COLLECT> which is the
500     exception of the rule - just like the "parent" of any single-component
501     package name in Perl is C<main>, the default slave of any top-level
502     package context is C<$AnyEvent::Log::COLLECT>.
503 root 1.9
504 root 1.18 Since perl packages form only an approximate hierarchy, this slave
505 root 1.9 context can of course be removed.
506    
507 root 1.18 All other (anonymous) contexts have no slaves and an empty title by
508 root 1.9 default.
509    
510 root 1.18 When the module is loaded it creates the C<$AnyEvent::Log::LOG> logging
511     context that simply logs everything via C<warn>, without propagating
512     anything anywhere by default. The purpose of this context is to provide
513 root 1.12 a convenient place to override the global logging target or to attach
514     additional log targets. It's not meant for filtering.
515    
516 root 1.18 It then creates the C<$AnyEvent::Log::FILTER> context whose
517     purpose is to suppress all messages with priority higher
518     than C<$ENV{PERL_ANYEVENT_VERBOSE}>. It then attached the
519     C<$AnyEvent::Log::LOG> context to it. The purpose of the filter context
520     is to simply provide filtering according to some global log level.
521    
522     Finally it creates the top-level package context C<$AnyEvent::Log::COLLECT>
523     and attaches the C<$AnyEvent::Log::FILTER> context to it, but otherwise
524     leaves it at default config. Its purpose is simply to collect all log
525     messages system-wide.
526    
527     The hierarchy is then:
528    
529     any package, eventually -> $COLLECT -> $FILTER -> $LOG
530    
531     The effect of all this is that log messages, by default, wander up to the
532     C<$AnyEvent::Log::COLLECT> context where all messages normally end up,
533     from there to C<$AnyEvent::Log::FILTER> where log messages with lower
534     priority then C<$ENV{PERL_ANYEVENT_VERBOSE}> will be filtered out and then
535     to the C<$AnyEvent::Log::LOG> context to be passed to C<warn>.
536    
537     This makes it easy to set a global logging level (by modifying $FILTER),
538     but still allow other contexts to send, for example, their debug and trace
539     messages to the $LOG target despite the global logging level, or to attach
540     additional log targets that log messages, regardless of the global logging
541     level.
542    
543     It also makes it easy to modify the default warn-logger ($LOG) to
544     something that logs to a file, or to attach additional logging targets
545     (such as loggign to a file) by attaching it to $FILTER.
546 root 1.9
547 root 1.11 =head2 CREATING/FINDING/DESTROYING CONTEXTS
548 root 1.2
549     =over 4
550    
551 root 1.8 =item $ctx = AnyEvent::Log::ctx [$pkg]
552    
553 root 1.9 This function creates or returns a logging context (which is an object).
554 root 1.8
555 root 1.9 If a package name is given, then the context for that packlage is
556     returned. If it is called without any arguments, then the context for the
557     callers package is returned (i.e. the same context as a C<AE::log> call
558     would use).
559 root 1.8
560     If C<undef> is given, then it creates a new anonymous context that is not
561     tied to any package and is destroyed when no longer referenced.
562    
563     =cut
564    
565     sub ctx(;$) {
566     my $pkg = @_ ? shift : (caller)[0];
567    
568     ref $pkg
569     ? $pkg
570     : defined $pkg
571     ? $CTX{$pkg} ||= AnyEvent::Log::_pkg_ctx $pkg
572 root 1.10 : bless [undef, (1 << 10) - 1 - 1], "AnyEvent::Log::Ctx"
573 root 1.8 }
574    
575 root 1.11 =item AnyEvent::Log::reset
576    
577 root 1.16 Resets all package contexts and recreates the default hierarchy if
578     necessary, i.e. resets the logging subsystem to defaults, as much as
579     possible. This process keeps references to contexts held by other parts of
580     the program intact.
581 root 1.11
582     This can be used to implement config-file (re-)loading: before loading a
583     configuration, reset all contexts.
584    
585     =cut
586    
587 root 1.43 our $ORIG_VERBOSE = $AnyEvent::VERBOSE;
588     $AnyEvent::VERBOSE = 9;
589    
590 root 1.11 sub reset {
591 root 1.15 # hard to kill complex data structures
592 root 1.19 # we "recreate" all package loggers and reset the hierarchy
593 root 1.15 while (my ($k, $v) = each %CTX) {
594     @$v = ($k, (1 << 10) - 1 - 1, { });
595    
596 root 1.19 $v->attach ($k =~ /^(.+)::/ ? $CTX{$1} : $AnyEvent::Log::COLLECT);
597 root 1.15 }
598 root 1.11
599 root 1.19 @$_ = ($_->[0], (1 << 10) - 1 - 1)
600     for $LOG, $FILTER, $COLLECT;
601    
602 root 1.35 #$LOG->slaves;
603 root 1.18 $LOG->title ('$AnyEvent::Log::LOG');
604 root 1.27 $LOG->log_to_warn;
605 root 1.15
606 root 1.18 $FILTER->slaves ($LOG);
607     $FILTER->title ('$AnyEvent::Log::FILTER');
608 root 1.43 $FILTER->level ($ORIG_VERBOSE);
609 root 1.18
610     $COLLECT->slaves ($FILTER);
611 root 1.19 $COLLECT->title ('$AnyEvent::Log::COLLECT');
612 root 1.15
613     _reassess;
614 root 1.11 }
615    
616 root 1.43 # override AE::log/logger
617     *AnyEvent::log = *AE::log = \&log;
618     *AnyEvent::logger = *AE::logger = \&logger;
619    
620     # convert AnyEvent loggers to AnyEvent::Log loggers
621     $_->[0] = ctx $_->[0] # convert "pkg" to "ctx"
622     for values %LOGGER;
623    
624 root 1.15 # create the default logger contexts
625 root 1.18 $LOG = ctx undef;
626     $FILTER = ctx undef;
627     $COLLECT = ctx undef;
628 root 1.15
629 root 1.11 AnyEvent::Log::reset;
630    
631 root 1.12 # hello, CPAN, please catch me
632 root 1.18 package AnyEvent::Log::LOG;
633     package AE::Log::LOG;
634     package AnyEvent::Log::FILTER;
635     package AE::Log::FILTER;
636     package AnyEvent::Log::COLLECT;
637     package AE::Log::COLLECT;
638 root 1.8
639 root 1.12 package AnyEvent::Log::Ctx;
640    
641     =item $ctx = new AnyEvent::Log::Ctx methodname => param...
642    
643     This is a convenience constructor that makes it simpler to construct
644     anonymous logging contexts.
645    
646     Each key-value pair results in an invocation of the method of the same
647     name as the key with the value as parameter, unless the value is an
648     arrayref, in which case it calls the method with the contents of the
649     array. The methods are called in the same order as specified.
650    
651     Example: create a new logging context and set both the default logging
652 root 1.18 level, some slave contexts and a logging callback.
653 root 1.12
654     $ctx = new AnyEvent::Log::Ctx
655     title => "dubious messages",
656     level => "error",
657     log_cb => sub { print STDOUT shift; 0 },
658 root 1.18 slaves => [$ctx1, $ctx, $ctx2],
659 root 1.12 ;
660    
661 root 1.9 =back
662    
663     =cut
664    
665 root 1.12 sub new {
666     my $class = shift;
667    
668     my $ctx = AnyEvent::Log::ctx undef;
669    
670     while (@_) {
671     my ($k, $v) = splice @_, 0, 2;
672     $ctx->$k (ref $v eq "ARRAY" ? @$v : $v);
673     }
674    
675     bless $ctx, $class # do we really support subclassing, hmm?
676     }
677 root 1.8
678    
679 root 1.9 =head2 CONFIGURING A LOG CONTEXT
680    
681     The following methods can be used to configure the logging context.
682    
683     =over 4
684    
685 root 1.8 =item $ctx->title ([$new_title])
686    
687     Returns the title of the logging context - this is the package name, for
688     package contexts, and a user defined string for all others.
689    
690     If C<$new_title> is given, then it replaces the package name or title.
691    
692     =cut
693    
694     sub title {
695     $_[0][0] = $_[1] if @_ > 1;
696     $_[0][0]
697     }
698    
699 root 1.9 =back
700    
701     =head3 LOGGING LEVELS
702    
703 root 1.10 The following methods deal with the logging level set associated with the
704     log context.
705 root 1.9
706     The most common method to use is probably C<< $ctx->level ($level) >>,
707     which configures the specified and any higher priority levels.
708    
709 root 1.10 All functions which accept a list of levels also accept the special string
710     C<all> which expands to all logging levels.
711    
712 root 1.9 =over 4
713    
714 root 1.8 =item $ctx->levels ($level[, $level...)
715    
716 root 1.10 Enables logging for the given levels and disables it for all others.
717 root 1.8
718     =item $ctx->level ($level)
719    
720     Enables logging for the given level and all lower level (higher priority)
721 root 1.10 ones. In addition to normal logging levels, specifying a level of C<0> or
722     C<off> disables all logging for this level.
723 root 1.8
724     Example: log warnings, errors and higher priority messages.
725    
726     $ctx->level ("warn");
727     $ctx->level (5); # same thing, just numeric
728    
729     =item $ctx->enable ($level[, $level...])
730    
731     Enables logging for the given levels, leaving all others unchanged.
732 root 1.5
733 root 1.8 =item $ctx->disable ($level[, $level...])
734    
735     Disables logging for the given levels, leaving all others unchanged.
736    
737 root 1.45 =item $ctx->cap ($level)
738    
739     Caps the maximum priority to the given level, for all messages logged
740     to, or passing through, this context. That is, while this doesn't affect
741     whether a message is logged or passed on, the maximum priority of messages
742     will be limited to the specified level - messages with a higher priority
743     will be set to the specified priority.
744    
745     Another way to view this is that C<< ->level >> filters out messages with
746     a too low priority, while C<< ->cap >> modifies messages with a too high
747     priority.
748    
749     This is useful when different log targets have different interpretations
750     of priority. For example, for a specific command line program, a wrong
751     command line switch might well result in a C<fatal> log message, while the
752     same message, logged to syslog, is likely I<not> fatal to the system or
753     syslog facility as a whole, but more likely a mere C<error>.
754    
755     This can be modeled by having a stderr logger that logs messages "as-is"
756     and a syslog logger that logs messages with a level cap of, say, C<error>,
757     or, for truly system-critical components, actually C<critical>.
758    
759 root 1.8 =cut
760    
761     sub _lvl_lst {
762 root 1.10 map {
763     $_ > 0 && $_ <= 9 ? $_+0
764     : $_ eq "all" ? (1 .. 9)
765     : $STR2LEVEL{$_} || Carp::croak "$_: not a valid logging level, caught"
766     } @_
767 root 1.8 }
768    
769 root 1.45 sub _lvl {
770     $_[0] =~ /^(?:0|off|none)$/ ? 0 : (_lvl_lst $_[0])[-1]
771     }
772    
773 root 1.8 our $NOP_CB = sub { 0 };
774    
775     sub levels {
776     my $ctx = shift;
777     $ctx->[1] = 0;
778     $ctx->[1] |= 1 << $_
779     for &_lvl_lst;
780     AnyEvent::Log::_reassess;
781     }
782    
783     sub level {
784     my $ctx = shift;
785 root 1.45 $ctx->[1] = ((1 << &_lvl) - 1) << 1;
786 root 1.8 AnyEvent::Log::_reassess;
787     }
788    
789     sub enable {
790     my $ctx = shift;
791     $ctx->[1] |= 1 << $_
792     for &_lvl_lst;
793     AnyEvent::Log::_reassess;
794     }
795    
796     sub disable {
797     my $ctx = shift;
798     $ctx->[1] &= ~(1 << $_)
799     for &_lvl_lst;
800     AnyEvent::Log::_reassess;
801     }
802    
803 root 1.45 sub cap {
804     my $ctx = shift;
805     $ctx->[5] = &_lvl;
806     }
807    
808 root 1.9 =back
809    
810 root 1.18 =head3 SLAVE CONTEXTS
811 root 1.9
812     The following methods attach and detach another logging context to a
813     logging context.
814    
815 root 1.18 Log messages are propagated to all slave contexts, unless the logging
816 root 1.9 callback consumes the message.
817    
818     =over 4
819    
820 root 1.8 =item $ctx->attach ($ctx2[, $ctx3...])
821    
822 root 1.18 Attaches the given contexts as slaves to this context. It is not an error
823 root 1.8 to add a context twice (the second add will be ignored).
824    
825     A context can be specified either as package name or as a context object.
826    
827     =item $ctx->detach ($ctx2[, $ctx3...])
828    
829 root 1.18 Removes the given slaves from this context - it's not an error to attempt
830 root 1.8 to remove a context that hasn't been added.
831    
832     A context can be specified either as package name or as a context object.
833 root 1.5
834 root 1.18 =item $ctx->slaves ($ctx2[, $ctx3...])
835 root 1.11
836 root 1.18 Replaces all slaves attached to this context by the ones given.
837 root 1.11
838 root 1.2 =cut
839    
840 root 1.8 sub attach {
841     my $ctx = shift;
842    
843     $ctx->[2]{$_+0} = $_
844     for map { AnyEvent::Log::ctx $_ } @_;
845     }
846    
847     sub detach {
848     my $ctx = shift;
849    
850     delete $ctx->[2]{$_+0}
851     for map { AnyEvent::Log::ctx $_ } @_;
852     }
853    
854 root 1.18 sub slaves {
855 root 1.11 undef $_[0][2];
856     &attach;
857     }
858    
859 root 1.9 =back
860    
861 root 1.18 =head3 LOG TARGETS
862 root 1.9
863     The following methods configure how the logging context actually does
864 root 1.10 the logging (which consists of formatting the message and printing it or
865 root 1.18 whatever it wants to do with it).
866 root 1.9
867     =over 4
868    
869 root 1.21 =item $ctx->log_cb ($cb->($str)
870 root 1.5
871 root 1.8 Replaces the logging callback on the context (C<undef> disables the
872     logging callback).
873 root 1.5
874 root 1.8 The logging callback is responsible for handling formatted log messages
875     (see C<fmt_cb> below) - normally simple text strings that end with a
876 root 1.21 newline (and are possibly multiline themselves).
877 root 1.8
878     It also has to return true iff it has consumed the log message, and false
879     if it hasn't. Consuming a message means that it will not be sent to any
880 root 1.18 slave context. When in doubt, return C<0> from your logging callback.
881 root 1.8
882     Example: a very simple logging callback, simply dump the message to STDOUT
883     and do not consume it.
884    
885     $ctx->log_cb (sub { print STDERR shift; 0 });
886    
887 root 1.10 You can filter messages by having a log callback that simply returns C<1>
888     and does not do anything with the message, but this counts as "message
889     being logged" and might not be very efficient.
890    
891     Example: propagate all messages except for log levels "debug" and
892     "trace". The messages will still be generated, though, which can slow down
893     your program.
894    
895     $ctx->levels ("debug", "trace");
896     $ctx->log_cb (sub { 1 }); # do not log, but eat debug and trace messages
897    
898 root 1.20 =item $ctx->fmt_cb ($fmt_cb->($timestamp, $orig_ctx, $level, $message))
899 root 1.8
900 root 1.10 Replaces the formatting callback on the context (C<undef> restores the
901 root 1.8 default formatter).
902    
903     The callback is passed the (possibly fractional) timestamp, the original
904 root 1.50 logging context (object, not title), the (numeric) logging level and
905     the raw message string and needs to return a formatted log message. In
906     most cases this will be a string, but it could just as well be an array
907     reference that just stores the values.
908 root 1.18
909 root 1.49 If, for some reason, you want to use C<caller> to find out more about the
910 root 1.18 logger then you should walk up the call stack until you are no longer
911     inside the C<AnyEvent::Log> package.
912 root 1.8
913     Example: format just the raw message, with numeric log level in angle
914     brackets.
915    
916     $ctx->fmt_cb (sub {
917     my ($time, $ctx, $lvl, $msg) = @_;
918    
919     "<$lvl>$msg\n"
920     });
921    
922     Example: return an array reference with just the log values, and use
923 root 1.50 C<PApp::SQL::sql_exec> to store the message in a database.
924 root 1.8
925     $ctx->fmt_cb (sub { \@_ });
926     $ctx->log_cb (sub {
927     my ($msg) = @_;
928    
929     sql_exec "insert into log (when, subsys, prio, msg) values (?, ?, ?, ?)",
930     $msg->[0] + 0,
931     "$msg->[1]",
932     $msg->[2] + 0,
933     "$msg->[3]";
934    
935     0
936     });
937    
938 root 1.27 =item $ctx->log_to_warn
939    
940     Sets the C<log_cb> to simply use C<CORE::warn> to report any messages
941     (usually this logs to STDERR).
942    
943 root 1.21 =item $ctx->log_to_file ($path)
944    
945     Sets the C<log_cb> to log to a file (by appending), unbuffered.
946    
947     =item $ctx->log_to_path ($path)
948    
949     Same as C<< ->log_to_file >>, but opens the file for each message. This
950     is much slower, but allows you to change/move/rename/delete the file at
951     basically any time.
952    
953 root 1.27 Needless(?) to say, if you do not want to be bitten by some evil person
954     calling C<chdir>, the path should be absolute. Doesn't help with
955     C<chroot>, but hey...
956    
957 root 1.40 =item $ctx->log_to_syslog ([$facility])
958 root 1.21
959 root 1.40 Logs all messages via L<Sys::Syslog>, mapping C<trace> to C<debug> and
960     all the others in the obvious way. If specified, then the C<$facility> is
961     used as the facility (C<user>, C<auth>, C<local0> and so on). The default
962     facility is C<user>.
963 root 1.21
964     Note that this function also sets a C<fmt_cb> - the logging part requires
965     an array reference with [$level, $str] as input.
966    
967 root 1.8 =cut
968    
969     sub log_cb {
970     my ($ctx, $cb) = @_;
971 root 1.6
972 root 1.10 $ctx->[3] = $cb;
973 root 1.6 }
974 root 1.5
975 root 1.8 sub fmt_cb {
976     my ($ctx, $cb) = @_;
977 root 1.6
978 root 1.8 $ctx->[4] = $cb;
979 root 1.5 }
980    
981 root 1.27 sub log_to_warn {
982     my ($ctx, $path) = @_;
983    
984     $ctx->log_cb (sub {
985     warn shift;
986     0
987     });
988     }
989    
990 root 1.18 sub log_to_file {
991     my ($ctx, $path) = @_;
992    
993     open my $fh, ">>", $path
994     or die "$path: $!";
995    
996     $ctx->log_cb (sub {
997     syswrite $fh, shift;
998     0
999     });
1000     }
1001    
1002 root 1.27 sub log_to_path {
1003 root 1.18 my ($ctx, $path) = @_;
1004    
1005     $ctx->log_cb (sub {
1006     open my $fh, ">>", $path
1007     or die "$path: $!";
1008    
1009     syswrite $fh, shift;
1010     0
1011     });
1012     }
1013    
1014 root 1.20 sub log_to_syslog {
1015 root 1.40 my ($ctx, $facility) = @_;
1016 root 1.20
1017     require Sys::Syslog;
1018    
1019 root 1.21 $ctx->fmt_cb (sub {
1020     my $str = $_[3];
1021     $str =~ s/\n(?=.)/\n+ /g;
1022    
1023     [$_[2], "($_[1][0]) $str"]
1024     });
1025    
1026 root 1.40 $facility ||= "user";
1027    
1028 root 1.20 $ctx->log_cb (sub {
1029 root 1.21 my $lvl = $_[0][0] < 9 ? $_[0][0] : 8;
1030 root 1.20
1031 root 1.40 Sys::Syslog::syslog ("$facility|" . ($lvl - 1), $_)
1032 root 1.21 for split /\n/, $_[0][1];
1033 root 1.20
1034     0
1035     });
1036     }
1037    
1038 root 1.18 =back
1039    
1040     =head3 MESSAGE LOGGING
1041    
1042     These methods allow you to log messages directly to a context, without
1043     going via your package context.
1044    
1045     =over 4
1046    
1047 root 1.8 =item $ctx->log ($level, $msg[, @params])
1048    
1049     Same as C<AnyEvent::Log::log>, but uses the given context as log context.
1050    
1051 root 1.52 Example: log a message in the context of another package.
1052    
1053     (AnyEvent::Log::ctx "Other::Package")->log (warn => "heely bo");
1054    
1055 root 1.8 =item $logger = $ctx->logger ($level[, \$enabled])
1056    
1057     Same as C<AnyEvent::Log::logger>, but uses the given context as log
1058     context.
1059    
1060     =cut
1061    
1062     *log = \&AnyEvent::Log::_log;
1063     *logger = \&AnyEvent::Log::_logger;
1064    
1065 root 1.27 =back
1066    
1067     =cut
1068    
1069     package AnyEvent::Log;
1070    
1071     =head1 CONFIGURATION VIA $ENV{PERL_ANYEVENT_LOG}
1072    
1073     Logging can also be configured by setting the environment variable
1074     C<PERL_ANYEVENT_LOG> (or C<AE_LOG>).
1075    
1076     The value consists of one or more logging context specifications separated
1077     by C<:> or whitespace. Each logging specification in turn starts with a
1078     context name, followed by C<=>, followed by zero or more comma-separated
1079     configuration directives, here are some examples:
1080    
1081     # set default logging level
1082     filter=warn
1083    
1084     # log to file instead of to stderr
1085     log=file=/tmp/mylog
1086    
1087     # log to file in addition to stderr
1088     log=+%file:%file=file=/tmp/mylog
1089    
1090     # enable debug log messages, log warnings and above to syslog
1091     filter=debug:log=+%warnings:%warnings=warn,syslog=LOG_LOCAL0
1092    
1093     # log trace messages (only) from AnyEvent::Debug to file
1094     AnyEvent::Debug=+%trace:%trace=only,trace,file=/tmp/tracelog
1095    
1096     A context name in the log specification can be any of the following:
1097    
1098     =over 4
1099    
1100     =item C<collect>, C<filter>, C<log>
1101    
1102     Correspond to the three predefined C<$AnyEvent::Log::COLLECT>,
1103     C<AnyEvent::Log::FILTER> and C<$AnyEvent::Log::LOG> contexts.
1104    
1105     =item C<%name>
1106    
1107     Context names starting with a C<%> are anonymous contexts created when the
1108     name is first mentioned. The difference to package contexts is that by
1109     default they have no attached slaves.
1110    
1111     =item a perl package name
1112    
1113     Any other string references the logging context associated with the given
1114     Perl C<package>. In the unlikely case where you want to specify a package
1115     context that matches on of the other context name forms, you can add a
1116     C<::> to the package name to force interpretation as a package.
1117    
1118     =back
1119    
1120     The configuration specifications can be any number of the following:
1121    
1122     =over 4
1123    
1124     =item C<stderr>
1125    
1126     Configures the context to use Perl's C<warn> function (which typically
1127     logs to C<STDERR>). Works like C<log_to_warn>.
1128    
1129     =item C<file=>I<path>
1130    
1131     Configures the context to log to a file with the given path. Works like
1132     C<log_to_file>.
1133    
1134     =item C<path=>I<path>
1135    
1136     Configures the context to log to a file with the given path. Works like
1137     C<log_to_path>.
1138    
1139     =item C<syslog> or C<syslog=>I<expr>
1140    
1141 root 1.32 Configures the context to log to syslog. If I<expr> is given, then it is
1142 root 1.27 evaluated in the L<Sys::Syslog> package, so you could use:
1143    
1144     log=syslog=LOG_LOCAL0
1145    
1146     =item C<nolog>
1147    
1148     Configures the context to not log anything by itself, which is the
1149     default. Same as C<< $ctx->log_cb (undef) >>.
1150    
1151 root 1.45 =item C<cap=>I<level>
1152    
1153     Caps logging messages entering this context at the given level, i.e.
1154     reduces the priority of messages with higher priority than this level. The
1155     default is C<0> (or C<off>), meaning the priority will not be touched.
1156    
1157 root 1.27 =item C<0> or C<off>
1158    
1159 root 1.45 Sets the logging level of the context to C<0>, i.e. all messages will be
1160 root 1.27 filtered out.
1161    
1162     =item C<all>
1163    
1164     Enables all logging levels, i.e. filtering will effectively be switched
1165     off (the default).
1166    
1167     =item C<only>
1168    
1169     Disables all logging levels, and changes the interpretation of following
1170     level specifications to enable the specified level only.
1171    
1172     Example: only enable debug messages for a context.
1173    
1174     context=only,debug
1175    
1176     =item C<except>
1177    
1178     Enables all logging levels, and changes the interpretation of following
1179     level specifications to disable that level. Rarely used.
1180    
1181     Example: enable all logging levels except fatal and trace (this is rather
1182     nonsensical).
1183    
1184     filter=exept,fatal,trace
1185    
1186     =item C<level>
1187    
1188     Enables all logging levels, and changes the interpretation of following
1189     level specifications to be "that level or any higher priority
1190     message". This is the default.
1191    
1192     Example: log anything at or above warn level.
1193    
1194     filter=warn
1195    
1196     # or, more verbose
1197     filter=only,level,warn
1198    
1199 root 1.32 =item C<1>..C<9> or a logging level name (C<error>, C<debug> etc.)
1200 root 1.27
1201     A numeric loglevel or the name of a loglevel will be interpreted according
1202     to the most recent C<only>, C<except> or C<level> directive. By default,
1203     specifying a logging level enables that and any higher priority messages.
1204    
1205     =item C<+>I<context>
1206    
1207 root 1.32 Attaches the named context as slave to the context.
1208 root 1.27
1209     =item C<+>
1210    
1211 root 1.47 A lone C<+> detaches all contexts, i.e. clears the slave list from the
1212 root 1.32 context. Anonymous (C<%name>) contexts have no attached slaves by default,
1213     but package contexts have the parent context as slave by default.
1214 root 1.27
1215     Example: log messages from My::Module to a file, do not send them to the
1216     default log collector.
1217    
1218     My::Module=+,file=/tmp/mymodulelog
1219 root 1.1
1220     =back
1221    
1222 root 1.30 Any character can be escaped by prefixing it with a C<\> (backslash), as
1223 root 1.33 usual, so to log to a file containing a comma, colon, backslash and some
1224     spaces in the filename, you would do this:
1225 root 1.30
1226     PERL_ANYEVENT_LOG='log=file=/some\ \:file\ with\,\ \\-escapes'
1227    
1228     Since whitespace (which includes newlines) is allowed, it is fine to
1229     specify multiple lines in C<PERL_ANYEVENT_LOG>, e.g.:
1230    
1231     PERL_ANYEVENT_LOG="
1232     filter=warn
1233     AnyEvent::Debug=+%trace
1234     %trace=only,trace,+log
1235     " myprog
1236    
1237     Also, in the unlikely case when you want to concatenate specifications,
1238     use whitespace as separator, as C<::> will be interpreted as part of a
1239     module name, an empty spec with two separators:
1240    
1241     PERL_ANYEVENT_LOG="$PERL_ANYEVENT_LOG MyMod=debug"
1242    
1243 root 1.27 =cut
1244    
1245     for (my $spec = $ENV{PERL_ANYEVENT_LOG}) {
1246     my %anon;
1247    
1248     my $pkg = sub {
1249 root 1.29 $_[0] eq "log" ? $LOG
1250     : $_[0] eq "filter" ? $FILTER
1251     : $_[0] eq "collect" ? $COLLECT
1252 root 1.45 : $_[0] =~ /^%(.+)$/ ? ($anon{$1} ||= do { my $ctx = ctx undef; $ctx->[0] = $_[0]; $ctx })
1253 root 1.29 : $_[0] =~ /^(.*?)(?:::)?$/ ? ctx "$1" # egad :/
1254     : die # never reached?
1255 root 1.27 };
1256    
1257 root 1.29 /\G[[:space:]]+/gc; # skip initial whitespace
1258    
1259     while (/\G((?:[^:=[:space:]]+|::|\\.)+)=/gc) {
1260 root 1.27 my $ctx = $pkg->($1);
1261     my $level = "level";
1262    
1263     while (/\G((?:[^,:[:space:]]+|::|\\.)+)/gc) {
1264     for ("$1") {
1265     if ($_ eq "stderr" ) { $ctx->log_to_warn;
1266     } elsif (/^file=(.+)/ ) { $ctx->log_to_file ("$1");
1267     } elsif (/^path=(.+)/ ) { $ctx->log_to_path ("$1");
1268 root 1.45 } elsif (/^syslog(?:=(.*))?/ ) { require Sys::Syslog; $ctx->log_to_syslog ("$1");
1269 root 1.27 } elsif ($_ eq "nolog" ) { $ctx->log_cb (undef);
1270 root 1.45 } elsif (/^cap=(.+)/ ) { $ctx->cap ("$1");
1271 root 1.27 } elsif (/^\+(.+)$/ ) { $ctx->attach ($pkg->("$1"));
1272     } elsif ($_ eq "+" ) { $ctx->slaves;
1273     } elsif ($_ eq "off" or $_ eq "0") { $ctx->level (0);
1274     } elsif ($_ eq "all" ) { $ctx->level ("all");
1275     } elsif ($_ eq "level" ) { $ctx->level ("all"); $level = "level";
1276     } elsif ($_ eq "only" ) { $ctx->level ("off"); $level = "enable";
1277     } elsif ($_ eq "except" ) { $ctx->level ("all"); $level = "disable";
1278     } elsif (/^\d$/ ) { $ctx->$level ($_);
1279     } elsif (exists $STR2LEVEL{$_} ) { $ctx->$level ($_);
1280     } else { die "PERL_ANYEVENT_LOG ($spec): parse error at '$_'\n";
1281     }
1282     }
1283    
1284     /\G,/gc or last;
1285     }
1286    
1287 root 1.29 /\G[:[:space:]]+/gc or last;
1288 root 1.27 }
1289    
1290 root 1.29 /\G[[:space:]]+/gc; # skip trailing whitespace
1291    
1292 root 1.27 if (/\G(.+)/g) {
1293     die "PERL_ANYEVENT_LOG ($spec): parse error at '$1'\n";
1294     }
1295     }
1296    
1297 root 1.12 =head1 EXAMPLES
1298    
1299 root 1.28 This section shows some common configurations, both as code, and as
1300     C<PERL_ANYEVENT_LOG> string.
1301 root 1.12
1302     =over 4
1303    
1304     =item Setting the global logging level.
1305    
1306 root 1.28 Either put C<PERL_ANYEVENT_VERBOSE=><number> into your environment before
1307     running your program, use C<PERL_ANYEVENT_LOG> or modify the log level of
1308     the root context at runtime:
1309 root 1.12
1310     PERL_ANYEVENT_VERBOSE=5 ./myprog
1311    
1312 root 1.28 PERL_ANYEVENT_LOG=log=warn
1313    
1314 root 1.18 $AnyEvent::Log::FILTER->level ("warn");
1315 root 1.12
1316     =item Append all messages to a file instead of sending them to STDERR.
1317    
1318     This is affected by the global logging level.
1319    
1320 root 1.28 $AnyEvent::Log::LOG->log_to_file ($path);
1321    
1322     PERL_ANYEVENT_LOG=log=file=/some/path
1323 root 1.12
1324     =item Write all messages with priority C<error> and higher to a file.
1325    
1326     This writes them only when the global logging level allows it, because
1327     it is attached to the default context which is invoked I<after> global
1328     filtering.
1329    
1330 root 1.43 $AnyEvent::Log::FILTER->attach (
1331 root 1.18 new AnyEvent::Log::Ctx log_to_file => $path);
1332 root 1.12
1333 root 1.28 PERL_ANYEVENT_LOG=filter=+%filelogger:%filelogger=file=/some/path
1334    
1335 root 1.12 This writes them regardless of the global logging level, because it is
1336     attached to the toplevel context, which receives all messages I<before>
1337     the global filtering.
1338    
1339 root 1.18 $AnyEvent::Log::COLLECT->attach (
1340     new AnyEvent::Log::Ctx log_to_file => $path);
1341 root 1.12
1342 root 1.28 PERL_ANYEVENT_LOG=%filelogger=file=/some/path:collect=+%filelogger
1343    
1344 root 1.18 In both cases, messages are still written to STDERR.
1345 root 1.12
1346 root 1.45 =item Additionally log all messages with C<warn> and higher priority to
1347     C<syslog>, but cap at C<error>.
1348    
1349     This logs all messages to the default log target, but also logs messages
1350     with priority C<warn> or higher (and not filtered otherwise) to syslog
1351     facility C<user>. Messages with priority higher than C<error> will be
1352     logged with level C<error>.
1353    
1354     $AnyEvent::Log::LOG->attach (
1355     new AnyEvent::Log::Ctx
1356     level => "warn",
1357     cap => "error",
1358     syslog => "user",
1359     );
1360    
1361     PERL_ANYEVENT_LOG=log=+%syslog:%syslog=warn,cap=error,syslog
1362    
1363 root 1.12 =item Write trace messages (only) from L<AnyEvent::Debug> to the default logging target(s).
1364    
1365 root 1.18 Attach the C<$AnyEvent::Log::LOG> context to the C<AnyEvent::Debug>
1366     context - this simply circumvents the global filtering for trace messages.
1367 root 1.12
1368     my $debug = AnyEvent::Debug->AnyEvent::Log::ctx;
1369 root 1.18 $debug->attach ($AnyEvent::Log::LOG);
1370 root 1.12
1371 root 1.28 PERL_ANYEVENT_LOG=AnyEvent::Debug=+log
1372    
1373 root 1.18 This of course works for any package, not just L<AnyEvent::Debug>, but
1374     assumes the log level for AnyEvent::Debug hasn't been changed from the
1375     default.
1376 root 1.13
1377 root 1.12 =back
1378    
1379 root 1.1 =head1 AUTHOR
1380    
1381     Marc Lehmann <schmorp@schmorp.de>
1382     http://home.schmorp.de/
1383    
1384     =cut
1385 root 1.28
1386 root 1.53 1
1387