NAME
Log::Handler::Output::DBI - Log messages to a database.
SYNOPSIS
use Log::Handler::Output::DBI;my $db = Log::Handler::Output::DBI->new(# database sourcedatabase => "database",driver => "mysql",host => "127.0.0.1",port => 3306,# or with "dbname" instead of "database"dbname => "database",driver => "Pg",host => "127.0.0.1",port => 5432,# or with data_sourcedata_source => "dbi:mysql:database=database;host=127.0.0.1;port=3306",# Username and passworduser => "user",password => "password",# debuggingdebug => 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-connectpersistent => 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:
- data_source
-
Set the dsn (data source name).
You can use this parameter instead of
"database","driver","host"and"port".
- database or dbname
-
Pass the database name.
- driver
-
Pass the database driver.
- host
-
Pass the hostname where the database is running.
- port
-
Pass the port where the database is listened.
- user
-
Pass the database user for the connect.
- password
-
Pass the users password.
- 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 nametable => "messages",# columns as stringcolumns => "level, ctime, cdate, pid, hostname, progname, message",# columns as arraycolumns => [ 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"and"columns".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",# orvalues => [ 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 messageTake 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.
- 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 information 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",);
Or you can connect to the database yourself. You should notice that if the database connection lost then the logger can't re-connect to the database and would return an error. Use "dbi_handle" at your own risk.
my $dbh = DBI->connect(...);my $db = Log::Handler::Output::DBI->new(dbi_handle => $dbh,table => "messages",columns => [ qw/level ctime message/ ],values => [ qw/%level %time %message/ ],);
connect()
Connect to the database.
disconnect()
Disconnect from the database.
validate()
Validate a configuration.
reload()
Reload with a new configuration.
errstr()
This function returns the last error message.
PREREQUISITES
CarpParams::ValidateDBIyour 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-2009 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.