~ubuntu-branches/ubuntu/trusty/libanyevent-perl/trusty

« back to all changes in this revision

Viewing changes to lib/AnyEvent/Log.pm

  • Committer: Package Import Robot
  • Author(s): Alessandro Ghedini
  • Date: 2012-05-08 15:22:47 UTC
  • mfrom: (1.4.16)
  • Revision ID: package-import@ubuntu.com-20120508152247-flmxmqnyonk0nqhi
Tags: 7.000-1
* New upstream release
* Email change: Alessandro Ghedini -> ghedo@debian.org
* Refresh fix-spelling.patch
* Drop use-tlsv1-in-test.patch (fixed upstream)

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
8
 
9
9
   use AnyEvent;
10
10
 
 
11
   AE::log fatal => "No config found, cannot continue!"; # never returns
 
12
   AE::log alert => "The battery died!";
 
13
   AE::log crit  => "The battery temperature is too hot!";
 
14
   AE::log error => "Division by zero attempted.";
 
15
   AE::log warn  => "Couldn't delete the file.";
 
16
   AE::log note  => "Wanted to create config, but config already exists.";
 
17
   AE::log info  => "File soandso successfully deleted.";
 
18
   AE::log debug => "the function returned 3";
11
19
   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
20
 
21
21
Log level overview:
22
22
 
63
63
module more or less exposes the mechanism, with some extra spiff to allow
64
64
using it from other modules as well.
65
65
 
66
 
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
 
something like:
 
66
Remember that the default verbosity level is C<4> (C<error>), so only
 
67
errors and more important messages will be logged, unless you set
 
68
C<PERL_ANYEVENT_VERBOSE> to a higher number before starting your program
 
69
(C<AE_VERBOSE=5> is recommended during development), or change the logging
 
70
level at runtime with something like:
70
71
 
71
72
   use AnyEvent::Log;
72
73
   $AnyEvent::Log::FILTER->level ("info");
108
109
messages at C<error> priority. The NOTE column tries to provide some
109
110
rationale on how to chose a logging level.
110
111
 
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
 
112
As a rough guideline, levels 1..3 are primarily meant for users of the
 
113
program (admins, staff), and are the only ones logged to STDERR by
113
114
default. Levels 4..6 are meant for users and developers alike, while
114
115
levels 7..9 are usually meant for developers.
115
116
 
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 :)
 
117
You can normally only log a message once at highest priority level (C<1>,
 
118
C<fatal>), because logging a fatal message will also quit the program - so
 
119
use it sparingly :)
 
120
 
 
121
For example, a program that finds an unknown switch on the commandline
 
122
might well use a fatal logging level to tell users about it - the "system"
 
123
in this case would be the program, or module.
119
124
 
120
125
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.
 
126
or C<all> - these are only valid for the methods that documented them.
122
127
 
123
128
=head1 LOGGING FUNCTIONS
124
129
 
125
 
These functions allow you to log messages. They always use the caller's
126
 
package as a "logging context". Also, the main logging function C<log> is
127
 
callable as C<AnyEvent::log> or C<AE::log> when the C<AnyEvent> module is
128
 
loaded.
 
130
The following functions allow you to log messages. They always use the
 
131
caller's package as a "logging context". Also, the main logging function,
 
132
C<log>, is aliased to C<AnyEvent::log> and C<AE::log> when the C<AnyEvent>
 
133
module is loaded.
129
134
 
130
135
=over 4
131
136
 
861
866
 
862
867
=over 4
863
868
 
864
 
=item $ctx->log_cb ($cb->($str)
 
869
=item $ctx->log_cb ($cb->($str))
865
870
 
866
871
Replaces the logging callback on the context (C<undef> disables the
867
872
logging callback).
896
901
default formatter).
897
902
 
898
903
The callback is passed the (possibly fractional) timestamp, the original
899
 
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.
 
904
logging context (object, not title), the (numeric) logging level and
 
905
the raw message string and needs to return a formatted log message. In
 
906
most cases this will be a string, but it could just as well be an array
 
907
reference that just stores the values.
903
908
 
904
 
If, for some reason, you want to use C<caller> to find out more baout the
 
909
If, for some reason, you want to use C<caller> to find out more about the
905
910
logger then you should walk up the call stack until you are no longer
906
911
inside the C<AnyEvent::Log> package.
907
912
 
915
920
   });
916
921
 
917
922
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.
 
923
C<PApp::SQL::sql_exec> to store the message in a database.
919
924
 
920
925
   $ctx->fmt_cb (sub { \@_ });
921
926
   $ctx->log_cb (sub {
937
942
 
938
943
=item $ctx->log_to_file ($path)
939
944
 
940
 
Sets the C<log_cb> to log to a file (by appending), unbuffered.
 
945
Sets the C<log_cb> to log to a file (by appending), unbuffered. The
 
946
function might return before the log file has been opened or created.
941
947
 
942
948
=item $ctx->log_to_path ($path)
943
949
 
982
988
   });
983
989
}
984
990
 
 
991
# this function is a good example of why threads are a must,
 
992
# simply for priority inversion.
 
993
sub _log_to_disk {
 
994
   # eval'uating this at runtime saves 220kb rss - perl has become
 
995
   # an insane memory waster.
 
996
   eval q{ # poor man's autoloading {}
 
997
      sub _log_to_disk {
 
998
         my ($ctx, $path, $keepopen) = @_;
 
999
 
 
1000
         my $fh;
 
1001
         my @queue;
 
1002
         my $delay;
 
1003
         my $disable;
 
1004
 
 
1005
         use AnyEvent::IO ();
 
1006
 
 
1007
         my $kick = sub {
 
1008
            undef $delay;
 
1009
            return unless @queue;
 
1010
            $delay = 1;
 
1011
 
 
1012
            # we pass $kick to $kick, so $kick itself doesn't keep a reference to $kick.
 
1013
            my $kick = shift;
 
1014
 
 
1015
            # write one or more messages
 
1016
            my $write = sub {
 
1017
               # we write as many messages as have been queued
 
1018
               my $data = join "", @queue;
 
1019
               @queue = ();
 
1020
 
 
1021
               AnyEvent::IO::aio_write $fh, $data, sub {
 
1022
                  $disable = 1;
 
1023
                  @_
 
1024
                     ? ($_[0] == length $data or AE::log 4 => "unable to write to logfile '$path': short write")
 
1025
                     :                           AE::log 4 => "unable to write to logfile '$path': $!";
 
1026
                  undef $disable;
 
1027
 
 
1028
                  if ($keepopen) {
 
1029
                     $kick->($kick);
 
1030
                  } else {
 
1031
                     AnyEvent::IO::aio_close ($fh, sub {
 
1032
                        undef $fh;
 
1033
                        $kick->($kick);
 
1034
                     });
 
1035
                  }
 
1036
               };
 
1037
            };
 
1038
 
 
1039
            if ($fh) {
 
1040
               $write->();
 
1041
            } else {
 
1042
               AnyEvent::IO::aio_open
 
1043
                  $path,
 
1044
                  AnyEvent::IO::O_CREAT | AnyEvent::IO::O_WRONLY | AnyEvent::IO::O_APPEND,
 
1045
                  0666,
 
1046
                  sub {
 
1047
                     $fh = shift
 
1048
                        or do {
 
1049
                           $disable = 1;
 
1050
                           AE::log 4 => "unable to open logfile '$path': $!";
 
1051
                           undef $disable;
 
1052
                           return;
 
1053
                        };
 
1054
 
 
1055
                     $write->();
 
1056
                  }
 
1057
               ;
 
1058
            }
 
1059
         };
 
1060
 
 
1061
         $ctx->log_cb (sub {
 
1062
            return if $disable;
 
1063
            push @queue, shift;
 
1064
            $kick->($kick) unless $delay;
 
1065
            0
 
1066
         });
 
1067
 
 
1068
         $kick->($kick) if $keepopen; # initial open
 
1069
      };
 
1070
   };
 
1071
   die if $@;
 
1072
   &_log_to_disk
 
1073
}
 
1074
 
985
1075
sub log_to_file {
986
1076
   my ($ctx, $path) = @_;
987
1077
 
988
 
   open my $fh, ">>", $path
989
 
      or die "$path: $!";
990
 
 
991
 
   $ctx->log_cb (sub {
992
 
      syswrite $fh, shift;
993
 
      0
994
 
   });
 
1078
   _log_to_disk $ctx, $path, 1;
995
1079
}
996
1080
 
997
1081
sub log_to_path {
998
1082
   my ($ctx, $path) = @_;
999
1083
 
1000
 
   $ctx->log_cb (sub {
1001
 
      open my $fh, ">>", $path
1002
 
         or die "$path: $!";
1003
 
 
1004
 
      syswrite $fh, shift;
1005
 
      0
1006
 
   });
 
1084
   _log_to_disk $ctx, $path, 0;
1007
1085
}
1008
1086
 
1009
1087
sub log_to_syslog {
1043
1121
 
1044
1122
Same as C<AnyEvent::Log::log>, but uses the given context as log context.
1045
1123
 
 
1124
Example: log a message in the context of another package.
 
1125
 
 
1126
   (AnyEvent::Log::ctx "Other::Package")->log (warn => "heely bo");
 
1127
 
1046
1128
=item $logger = $ctx->logger ($level[, \$enabled])
1047
1129
 
1048
1130
Same as C<AnyEvent::Log::logger>, but uses the given context as log
1199
1281
 
1200
1282
=item C<+>
1201
1283
 
1202
 
A line C<+> detaches all contexts, i.e. clears the slave list from the
 
1284
A lone C<+> detaches all contexts, i.e. clears the slave list from the
1203
1285
context. Anonymous (C<%name>) contexts have no attached slaves by default,
1204
1286
but package contexts have the parent context as slave by default.
1205
1287
 
1285
1367
   }
1286
1368
}
1287
1369
 
1288
 
1;
1289
 
 
1290
1370
=head1 EXAMPLES
1291
1371
 
1292
1372
This section shows some common configurations, both as code, and as
1372
1452
=head1 AUTHOR
1373
1453
 
1374
1454
 Marc Lehmann <schmorp@schmorp.de>
1375
 
 http://home.schmorp.de/
 
1455
 http://anyevent.schmorp.de
1376
1456
 
1377
1457
=cut
1378
1458
 
 
1459
1
 
1460