NAME¶
Log::Handler::Output::DBI - Log messages to a database.
SYNOPSIS¶
use Log::Handler::Output::DBI;
my $db = Log::Handler::Output::DBI->new(
# database source
database => "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_source
data_source => "dbi:mysql:database=database;host=127.0.0.1;port=3306",
# Username and password
user => "user",
password => "password",
# 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:
- 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 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" 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",
# 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.
- 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¶
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-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.