NAME
Log::Dispatch::DBI - Class for logging to database via DBI interface
SYNOPSIS
use Log::Dispatch::DBI;
my $log = Log::Dispatch::DBI->new(
name => 'dbi',
min_level => 'info',
datasource => 'dbi:mysql:log',
username => 'user',
password => 'password',
table => 'logging',
);
# Or, if your handle is alreaady connected
$log = Log::Dispatch::DBI->new(
name => 'dbi',
min_level => 'info',
dbh => $dbh,
);
$log->log(level => 'emergency', messsage => 'something BAD happened');
DESCRIPTION
Log::Dispatch::DBI is a subclass of Log::Dispatch::Output, which inserts logging output into relational database using DBI interface.
METHODS
- new
-
$log = Log::Dispatch::DBI->new(%params);
This method takes a hash of parameters. The following options are valid:
- -- name, min_level, max_level, callbacks
-
Same as various Log::Dispatch::* classes.
- -- dbh
-
Database handle where Log::Dispatch::DBI throws log message.
- -- datasource, username, password
-
If database connection is not yet established, put the DSN, username and password for DBI connect method. Destructor method of Log::Dispatch::DBI disconnects database handle, if the handle is made inside by these parameters. (The method does not disconnect the handle if it's supplied with
dbh
parameter.) - -- table
-
Table name for logging. default is log.
- log_message
-
inherited from Log::Dispatch::Output.
TABLE SCHEMA
Maybe something like this for MySQL.
CREATE TABLE log (
id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
level varchar(9) NOT NULL,
message text NOT NULL,
timestamp timestamp
);
For example,
$log->log(level => 'info', message => 'too bad');
will execute the following SQL:
INSERT INTO log (level, message) VALUES ('info', 'too bad');
If you change this behaviour, what you should do is to subclass Log::Dispatch::DBI and override create_statement
and log_message
method.
AUTHOR
Tatsuhiko Miyagawa <miyagawa@bulknews.net>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.