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