NAME
Log::Handler::Output::DBI - Log messages to a database.
SYNOPSIS
use Log::Handler::Output::DBI;
my $db = Log::Handler::Output::DBI->new(
# database connection
database => 'database',
driver => 'mysql',
user => 'user',
password => 'password',
host => '127.0.0.1',
port => 3306,
# debugging
debug => 1,
# table, columns and values (as string)
table => 'messages',
columns => 'level ctime cdate pid hostname progname message',
values => '%level %time %date %pid %hostname %progname %message',
# table, columns and values (as array reference)
table => 'messages',
columns => [ qw/level ctime cdate pid hostname progname message/ ],
values => [ qw/%level %time %date %pid %hostname %progname %message/ ],
# table, columns and values (your own statement)
statement => 'insert into messages (level,ctime,cdate,pid,hostname,progname,message) values (?,?,?,?,?,?,?)',
values => [ qw/%level %time %date %pid %hostname %progname %message/ ],
# if you like persistent connections and want to re-connect
persistent => 1,
);
my %message = (
level => 'ERROR',
time => '10:12:13',
date => '1999-12-12',
pid => $$,
hostname => 'localhost',
progname => $0,
message => 'an error here'
);
$db->log(\%message);
DESCRIPTION
With this output you can insert messages into a database table.
METHODS
new()
Call new()
to create a new Log::Handler::Output::DBI object.
The following options are possible:
- database
-
Pass the database name.
- driver
-
Pass the database driver.
- user
-
Pass the database user for the connect.
- password
-
Pass the users password.
- host
-
Pass the hostname where the database is running.
- port
-
Pass the port where the database is listened.
- table and columns
-
With this options you can pass the table name for the insert and the columns. You can pass the columns as string or as array. Example:
# the table name table => 'messages', # columns as string columns => 'level, ctime, cdate, pid, hostname, progname, message', # columns as array columns => [ qw/level ctime cdate pid hostname progname message/ ],
The statement would created as follows
insert into message (level, ctime, cdate, pid, hostname, progname, mtime, message) values (?,?,?,?,?,?,?)
- statement
-
With this option you can pass your own statement if you don't want to you the options
table
andcolumns
.statement => 'insert into message (level, ctime, cdate, pid, hostname, progname, mtime, message)' .' values (?,?,?,?,?,?,?)'
- values
-
With this option you have to set the values for the insert.
values => '%level, %time, %date, %pid, %hostname, %progname, %message', # or values => [ qw/%level %time %date %pid %hostname %progname %message/ ],
The placeholders are identical with the pattern names that you have to pass with the option
message_pattern
from Log::Handler.%L level %T time %D date %P pid %H hostname %N newline %C caller %p package %f filename %l line %s subroutine %S progname %r runtime %t mtime %m message
Take a look to the documentation of Log::Handler for all possible patterns.
- persistent
-
With this option you can enable or disable a persistent database connection and re-connect if the connection was lost.
This option is set to 1 on default.
- reconnect
-
reconnect
is deprecated! - dbi_params
-
This option is useful if you want to pass arguments to DBI. The default is set to
{ PrintError => 0, AutoCommit => 1 }
PrintError
is deactivated because this would print error messages as warnings to STDERR.You can pass your own arguments - and overwrite it - with
dbi_params => { PrintError => 1, AutoCommit => 0 }
- debug
-
With this option it's possible to enable debugging. The informations can be intercepted with
$SIG{__WARN__}
.
log()
Log a message to the database.
my $db = Log::Handler::Output::DBI->new(
database => 'database',
driver => 'mysql',
user => 'user',
password => 'password',
host => '127.0.0.1',
port => 3306,
table => 'messages',
columns => [ qw/level ctime message/ ],
values => [ qw/%level %time %message/ ],
persistent => 1,
);
$db->log(
message => 'your message',
level => 'INFO',
time => '2008-10-10 10:12:23',
);
connect()
Connect to the database.
disconnect()
Disconnect from the database.
errstr()
This function returns the last error message.
PREREQUISITES
Carp
Params::Validate
DBI
your DBI driver you want to use
EXPORTS
No exports.
REPORT BUGS
Please report all bugs to <jschulz.cpan(at)bloonix.de>.
If you send me a mail then add Log::Handler into the subject.
AUTHOR
Jonny Schulz <jschulz.cpan(at)bloonix.de>.
COPYRIGHT
Copyright (C) 2007-2008 by Jonny Schulz. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.