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

Comparing AnyEvent/lib/AnyEvent/Log.pm (file contents):
Revision 1.57 by root, Thu Apr 5 03:13:27 2012 UTC vs.
Revision 1.63 by root, Wed Oct 29 20:41:17 2014 UTC

71 71
72 use AnyEvent::Log; 72 use AnyEvent::Log;
73 $AnyEvent::Log::FILTER->level ("info"); 73 $AnyEvent::Log::FILTER->level ("info");
74 74
75The design goal behind this module was to keep it simple (and small), 75The design goal behind this module was to keep it simple (and small),
76but make it powerful enough to be potentially useful for any module, and 76but make it powerful enough to be potentially useful for any module,
77extensive enough for the most common tasks, such as logging to multiple 77and extensive enough for the most common tasks, such as logging to
78targets, or being able to log into a database. 78multiple targets, or being able to log into a database.
79 79
80The module is also usable before AnyEvent itself is initialised, in which 80The module is also usable before AnyEvent itself is initialised, in which
81case some of the functionality might be reduced. 81case some of the functionality might be reduced.
82 82
83The amount of documentation might indicate otherwise, but the runtime part 83The amount of documentation might indicate otherwise, but the runtime part
153our ($COLLECT, $FILTER, $LOG); 153our ($COLLECT, $FILTER, $LOG);
154 154
155our ($now_int, $now_str1, $now_str2); 155our ($now_int, $now_str1, $now_str2);
156 156
157# Format Time, not public - yet? 157# Format Time, not public - yet?
158sub ft($) { 158sub format_time($) {
159 my $i = int $_[0]; 159 my $i = int $_[0];
160 my $f = sprintf "%06d", 1e6 * ($_[0] - $i); 160 my $f = sprintf "%06d", 1e6 * ($_[0] - $i);
161 161
162 ($now_int, $now_str1, $now_str2) = ($i, split /\x01/, POSIX::strftime "%Y-%m-%d %H:%M:%S.\x01 %z", localtime $i) 162 ($now_int, $now_str1, $now_str2) = ($i, split /\x01/, POSIX::strftime "%Y-%m-%d %H:%M:%S.\x01 %z", localtime $i)
163 if $now_int != $i; 163 if $now_int != $i;
262}; 262};
263 263
264our @LEVEL2STR = qw(0 fatal alert crit error warn note info debug trace); 264our @LEVEL2STR = qw(0 fatal alert crit error warn note info debug trace);
265 265
266# time, ctx, level, msg 266# time, ctx, level, msg
267sub _format($$$$) { 267sub default_format($$$$) {
268 my $ts = ft $_[0]; 268 my $ts = format_time $_[0];
269 my $ct = " "; 269 my $ct = " ";
270 270
271 my @res; 271 my @res;
272 272
273 for (split /\n/, sprintf "%-5s %s: %s", $LEVEL2STR[$_[2]], $_[1][0], $_[3]) { 273 for (split /\n/, sprintf "%-5s %s: %s", $LEVEL2STR[$_[2]], $_[1][0], $_[3]) {
322 }; 322 };
323 323
324 # format msg 324 # format msg
325 my $str = $ctx->[4] 325 my $str = $ctx->[4]
326 ? $ctx->[4]($now, $_[0], $level, $format) 326 ? $ctx->[4]($now, $_[0], $level, $format)
327 : ($fmt[$level] ||= _format $now, $_[0], $level, $format); 327 : ($fmt[$level] ||= default_format $now, $_[0], $level, $format);
328 328
329 $success = 1; 329 $success = 1;
330 330
331 $ctx->[3]($str) 331 $ctx->[3]($str)
332 or push @ctx, values %{ $ctx->[2] }; # not consumed - propagate 332 or push @ctx, values %{ $ctx->[2] }; # not consumed - propagate
454Since C<AnyEvent::Log> has to work even before the L<AnyEvent> has been 454Since C<AnyEvent::Log> has to work even before the L<AnyEvent> has been
455initialised, this switch will also decide whether to use C<CORE::time> or 455initialised, this switch will also decide whether to use C<CORE::time> or
456C<Time::HiRes::time> when logging a message before L<AnyEvent> becomes 456C<Time::HiRes::time> when logging a message before L<AnyEvent> becomes
457available. 457available.
458 458
459=item AnyEvent::Log::format_time $timestamp
460
461Formats a timestamp as returned by C<< AnyEvent->now >> or C<<
462AnyEvent->time >> or many other functions in the same way as
463C<AnyEvent::Log> does.
464
465In your main program (as opposed to in your module) you can override
466the default timestamp display format by loading this module and then
467redefining this function.
468
469Most commonly, this function can be used in formatting callbacks.
470
471=item AnyEvent::Log::default_format $time, $ctx, $level, $msg
472
473Format a log message using the given timestamp, logging context, log level
474and log message.
475
476This is the formatting function used to format messages when no custom
477function is provided.
478
479In your main program (as opposed to in your module) you can override the
480default message format by loading this module and then redefining this
481function.
482
483=item AnyEvent::Log::fatal_exit
484
485This is the function that is called after logging a C<fatal> log
486message. It must not return.
487
488The default implementation simply calls C<exit 1>.
489
490In your main program (as opposed to in your module) you can override
491the fatal exit function by loading this module and then redefining this
492function. Make sure you don't return.
493
459=back 494=back
460 495
461=head1 LOGGING CONTEXTS 496=head1 LOGGING CONTEXTS
462 497
463This module associates every log message with a so-called I<logging 498This module associates every log message with a so-called I<logging
907reference that just stores the values. 942reference that just stores the values.
908 943
909If, for some reason, you want to use C<caller> to find out more about the 944If, for some reason, you want to use C<caller> to find out more about the
910logger then you should walk up the call stack until you are no longer 945logger then you should walk up the call stack until you are no longer
911inside the C<AnyEvent::Log> package. 946inside the C<AnyEvent::Log> package.
947
948To implement your own logging callback, you might find the
949C<AnyEvent::Log::format_time> and C<AnyEvent::Log::default_format>
950functions useful.
951
952Example: format the message just as AnyEvent::Log would, by letting
953AnyEvent::Log do the work. This is a good basis to design a formatting
954callback that only changes minor aspects of the formatting.
955
956 $ctx->fmt_cb (sub {
957 my ($time, $ctx, $lvl, $msg) = @_;
958
959 AnyEvent::Log::default_format $time, $ctx, $lvl, $msg
960 });
912 961
913Example: format just the raw message, with numeric log level in angle 962Example: format just the raw message, with numeric log level in angle
914brackets. 963brackets.
915 964
916 $ctx->fmt_cb (sub { 965 $ctx->fmt_cb (sub {
1447assumes the log level for AnyEvent::Debug hasn't been changed from the 1496assumes the log level for AnyEvent::Debug hasn't been changed from the
1448default. 1497default.
1449 1498
1450=back 1499=back
1451 1500
1501=head1 ASYNCHRONOUS DISK I/O
1502
1503This module uses L<AnyEvent::IO> to actually write log messages (in
1504C<log_to_file> and C<log_to_path>), so it doesn't block your program when
1505the disk is busy and a non-blocking L<AnyEvent::IO> backend is available.
1506
1452=head1 AUTHOR 1507=head1 AUTHOR
1453 1508
1454 Marc Lehmann <schmorp@schmorp.de> 1509 Marc Lehmann <schmorp@schmorp.de>
1455 http://home.schmorp.de/ 1510 http://anyevent.schmorp.de
1456 1511
1457=cut 1512=cut
1458 1513
14591 15141
1460 1515

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines