ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Log.pm
Revision: 1.45
Committed: Sun Oct 2 00:42:04 2011 UTC (12 years, 8 months ago) by root
Branch: MAIN
Changes since 1.44: +78 -13 lines
Log Message:
*** empty log message ***

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