| Log-Agent documentation | Contained in the Log-Agent distribution. |
Log::Agent::Tag::Callback - a dynamic tag string
require Log::Agent::Tag::Callback;
# Inherits from Log::Agent::Tag.
my $tag = Log::Agent::Tag::Callback->make(
-name => "session id",
-callback => Callback->new($obj, 'method', @args),
-postfix => 1,
-separator => " -- ",
);
This class represents a dynamic tag string, whose value is determined
by invoking a pre-determined callback, which is described by a Callback
object.
You need to make your application depend on the Callback module from CPAN
if you make use of this tagging feature, since Log::Agent does not
depend on it, on purpose (it does not really use it, it only offers an
interface to plug it in). At least version 1.02 must be used.
The following parameters are defined, in alphabetical order:
-callback => Callback objectThe callback to invoke to determine the value of the tag. The call is protected via a busy flag, in case there is an unwanted recursion due to a call to one of the logging routines whilst within the callback.
If the callback is busy, the tag emitted is:
callback "user" busy
assuming user is the name you supplied via -name for this tag.
-name => nameThe name of this tag. Used to flag a callback as busy in case there is an unwanted recursion into the callback routine.
-postfix => flagWhether tag should be placed after or before the log message. By default, it is prepended to the log message, i.e. this parameter is false.
-separator => stringThe separation string between the tag and the log message. A single space by default.
Raphael Manfredi <Raphael_Manfredi@pobox.com>
Callback(3), Log::Agent::Tag(3), Log::Agent::Message(3).
| Log-Agent documentation | Contained in the Log-Agent distribution. |
# # $Id: Callback.pm,v 1.1 2002/03/09 16:10:33 wendigo Exp $ # # Copyright (c) 1999, Raphael Manfredi # # You may redistribute only under the terms of the Artistic License, # as specified in the README file that comes with the distribution. # # HISTORY # $Log: Callback.pm,v $ # Revision 1.1 2002/03/09 16:10:33 wendigo # New maintainer # # Revision 0.2.1.2 2001/03/31 10:02:20 ram # patch7: fixed =over to add explicit indent level # # Revision 0.2.1.1 2001/03/13 18:45:16 ram # patch2: created # # Revision 0.2 2000/11/06 19:30:32 ram # Baseline for second Alpha release. # # $EndLog$ # use strict; ######################################################################## package Log::Agent::Tag::Callback; require Log::Agent::Tag; use vars qw(@ISA); @ISA = qw(Log::Agent::Tag); # # ->make # # Creation routine. # # Calling arguments: a hash table list. # # The keyed argument list may contain: # -POSTFIX whether to postfix log message or prefix it. # -SEPARATOR separator string to use between tag and message # -NAME tag's name (optional) # -CALLBACK Callback object # # Attributes: # callback the Callback object # sub make { my $self = bless {}, shift; my (%args) = @_; my ($name, $postfix, $separator, $callback); my %set = ( -name => \$name, -callback => \$callback, -postfix => \$postfix, -separator => \$separator, ); while (my ($arg, $val) = each %args) { my $vset = $set{lc($arg)}; next unless ref $vset; $$vset = $val; } unless (defined $callback) { require Carp; Carp::croak("Argument -callback is mandatory"); } unless (ref $callback && $callback->isa("Callback")) { require Carp; Carp::croak("Argument -callback needs a Callback object"); } $self->_init($name, $postfix, $separator); $self->{callback} = $callback; return $self; } # # Attribute access # sub callback { $_[0]->{callback} } # # Defined routines # # # ->string -- defined # # Build tag string by invoking callback. # sub string { my $self = shift; # # Avoid recursion, which could happen if another logxxx() call is made # whilst within the callback. # # Assumes mono-threaded application. # return sprintf 'callback "%s" busy', $self->name if $self->{busy}; $self->{busy} = 1; my $string = $self->callback->call(); $self->{busy} = 0; return $string; } 1; # for "require" __END__