/[cvs]/nfo/perl/libs/Log/Dispatch/Tangram.pm
ViewVC logotype

Annotation of /nfo/perl/libs/Log/Dispatch/Tangram.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (hide annotations)
Thu Oct 17 00:11:21 2002 UTC (21 years, 8 months ago) by joko
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +6 -3 lines
+ bugfixes regarding "deep recursion" stuff
+ just log to storage if storage is connected

1 cvsjoko 1.1 #################################
2     #
3 joko 1.3 # $Id: Tangram.pm,v 1.2 2002/10/11 04:48:05 cvsjoko Exp $
4 cvsjoko 1.2 #
5     # $Log: Tangram.pm,v $
6 joko 1.3 # Revision 1.2 2002/10/11 04:48:05 cvsjoko
7     # + added strictness (use strict, use warnings)
8     #
9 cvsjoko 1.2 # Revision 1.1 2002/10/10 03:44:42 cvsjoko
10     # + new
11 cvsjoko 1.1 #
12     #
13     #################################
14    
15     package Log::Dispatch::Tangram;
16    
17     use strict;
18 cvsjoko 1.2 use warnings;
19 cvsjoko 1.1
20     use Log::Dispatch::Output;
21    
22     use base qw( Log::Dispatch::Output );
23     #use fields qw( fh filename );
24    
25     use vars qw[ $VERSION ];
26    
27 joko 1.3 $VERSION = sprintf "%d.%02d", q$Revision: 1.2 $ =~ /: (\d+)\.(\d+)/;
28 cvsjoko 1.1
29     use POSIX qw(strftime);
30    
31     # Prevents death later on if IO::File can't export this constant.
32     BEGIN
33     {
34     my $exists;
35     eval { $exists = O_APPEND(); };
36    
37     *O_APPEND = \&APPEND unless defined $exists;
38     }
39    
40     sub APPEND {;};
41    
42     1;
43    
44     sub new
45     {
46     my $proto = shift;
47     my $class = ref $proto || $proto;
48    
49     my %params = @_;
50    
51     my $self = bless {}, $class;
52    
53     $self->_basic_init(%params);
54     #$self->_make_handle(%params);
55     $self->_params_init(%params);
56    
57     return $self;
58     }
59    
60     sub _params_init {
61     my $self = shift;
62     my %params = @_;
63    
64     # todo: do generic / push all args ...
65     $self->{storage} = $params{storage};
66     $self->{objectCreator} = $params{objectCreator};
67     $self->{mapping} = $params{fields};
68     $self->{filter_patterns} = $params{filter_patterns};
69    
70     }
71    
72     sub _make_handle
73     {
74     my $self = shift;
75     my %params = @_;
76    
77     $self->{filename} = $params{filename};
78    
79     my $mode;
80     if ( exists $params{mode} &&
81     defined $params{mode} &&
82     ( $params{mode} =~ /^>>$|^append$/ ||
83     ( $params{mode} =~ /^\d+$/ &&
84     $params{mode} == O_APPEND() ) ) )
85     {
86     $mode = '>>';
87     }
88     else
89     {
90     $mode = '>';
91     }
92    
93     my $fh = do { local *FH; *FH; };
94     open $fh, "$mode$self->{filename}"
95     or die "Can't write to '$self->{filename}': $!";
96    
97     # turn on autoflush
98     my $oldfh = select $fh; $| = 1; select $oldfh;
99    
100     $self->{fh} = $fh;
101     }
102    
103     sub log_message
104     {
105     my $self = shift;
106     my %params = @_;
107    
108     #my $fh = $self->{fh};
109     #print $fh $params{message};
110    
111     #print "MESSAGE TO TANGRAM: ", $params{message}, "\n";
112     #print "STORAGE: ", $self->{storage}, "\n";
113     #print "CREATOR: ", $self->{objectCreator}, "\n";
114    
115     # filter log messages
116     foreach my $pattern (@{$self->{filter_patterns}}) {
117     #print "pattern: $pattern", "\n";
118     #print "pattern: $pattern", "\n";
119     #print $params{message}, "\n";
120     #print $params{message}, "\n";
121     my $bool_dontlog = (grep /$pattern/, $params{message});
122     #print "dontlog: $bool_dontlog", "\n";
123     #print "result: $bool_dontlog", "\n";
124     return if ($bool_dontlog);
125     }
126    
127     my $sysEvent = $self->{objectCreator}();
128    
129     my $now_string = strftime("%Y-%m-%d %H:%M:%S", localtime);
130     $sysEvent->{$self->{mapping}{timestamp}} = $now_string;
131     $sysEvent->{$self->{mapping}{name}} = $params{name};
132     $sysEvent->{$self->{mapping}{level}} = $params{level};
133     $sysEvent->{$self->{mapping}{message}} = $params{message};
134    
135 joko 1.3 $self->{storage}->isConnected() && $self->{storage}->insert($sysEvent);
136 cvsjoko 1.1
137     }
138    
139     sub DESTROY
140     {
141     my $self = shift;
142    
143     if ( $self->{fh} )
144     {
145     my $fh = $self->{fh};
146     close $fh;
147     }
148     }
149    
150     __END__
151    
152     =head1 NAME
153    
154     Log::Dispatch::File - Object for logging to files
155    
156     =head1 SYNOPSIS
157    
158     use Log::Dispatch::File;
159    
160     my $file = Log::Dispatch::File->new( name => 'file1',
161     min_level => 'info',
162     filename => 'Somefile.log',
163     mode => 'append' );
164    
165     $file->log( level => 'emerg', message => "I've fallen and I can't get up\n" );
166    
167     =head1 DESCRIPTION
168    
169     This module provides a simple object for logging to files under the
170     Log::Dispatch::* system.
171    
172     =head1 METHODS
173    
174     =over 4
175    
176     =item * new(%PARAMS)
177    
178     This method takes a hash of parameters. The following options are
179     valid:
180    
181     =item -- name ($)
182    
183     The name of the object (not the filename!). Required.
184    
185     =item -- min_level ($)
186    
187     The minimum logging level this object will accept. See the
188     Log::Dispatch documentation for more information. Required.
189    
190     =item -- max_level ($)
191    
192     The maximum logging level this obejct will accept. See the
193     Log::Dispatch documentation for more information. This is not
194     required. By default the maximum is the highest possible level (which
195     means functionally that the object has no maximum).
196    
197     =item -- filename ($)
198    
199     The filename to be opened for writing.
200    
201     =item -- mode ($)
202    
203     The mode the file should be opened with. Valid options are 'write',
204     '>', 'append', '>>', or the relevant constants from Fcntl. The
205     default is 'write'.
206    
207     =item -- callbacks( \& or [ \&, \&, ... ] )
208    
209     This parameter may be a single subroutine reference or an array
210     reference of subroutine references. These callbacks will be called in
211     the order they are given and passed a hash containing the following keys:
212    
213     ( message => $log_message, level => $log_level )
214    
215     The callbacks are expected to modify the message and then return a
216     single scalar containing that modified message. These callbacks will
217     be called when either the C<log> or C<log_to> methods are called and
218     will only be applied to a given message once.
219    
220     =item * log_message( message => $ )
221    
222     Sends a message to the appropriate output. Generally this shouldn't
223     be called directly but should be called through the C<log()> method
224     (in Log::Dispatch::Output).
225    
226     =back
227    
228     =head1 AUTHOR
229    
230     Dave Rolsky, <autarch@urth.org>
231    
232     =head1 SEE ALSO
233    
234     Log::Dispatch, Log::Dispatch::ApacheLog, Log::Dispatch::Email,
235     Log::Dispatch::Email::MailSend, Log::Dispatch::Email::MailSendmail,
236     Log::Dispatch::Email::MIMELite, Log::Dispatch::Handle,
237     Log::Dispatch::Output, Log::Dispatch::Screen, Log::Dispatch::Syslog
238    
239     =cut
240    

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed