1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
###########################################
# Test using Log::Dispatch::DBI
# Kevin Goess <cpan@goess.org>
###########################################
use strict;
use warnings;
our $table_name = "log4perl$$";
BEGIN {
if($ENV{INTERNAL_DEBUG}) {
require Log::Log4perl::InternalDebug;
Log::Log4perl::InternalDebug->enable();
}
}
use Test::More;
use Log::Log4perl;
BEGIN {
use FindBin qw($Bin);
use lib "$Bin/lib";
require Log4perlInternalTest;
}
BEGIN {
my $minversion = \%Log4perlInternalTest::MINVERSION;
eval {
require DBD::CSV;
die if $DBD::CSV::VERSION < $minversion->{ "DBD::CSV" };
require Log::Dispatch;
};
if ($@) {
plan skip_all =>
"only with Log::Dispatch and DBD::CSV $minversion->{'DBD::CSV'}";
}else{
plan tests => 14;
}
}
END {
unlink "t/tmp/$table_name";
rmdir "t/tmp";
}
mkdir "t/tmp" unless -d "t/tmp";
require DBI;
my $dbh = DBI->connect('DBI:CSV:f_dir=t/tmp','testuser','testpw',{ PrintError => 1 });
-e "t/tmp/$table_name" && $dbh->do("DROP TABLE $table_name");
my $stmt = <<EOL;
CREATE TABLE $table_name (
loglevel char(9) ,
message char(128),
shortcaller char(5),
thingid char(6),
category char(16),
pkg char(16),
runtime1 char(16),
runtime2 char(16)
)
EOL
$dbh->do($stmt);
#creating a log statement where bind values 1,3,5 and 6 are
#calculated from conversion specifiers and 2,4,7,8 are
#calculated at runtime and fed to the $logger->whatever(...)
#statement
my $config = <<"EOT";
#log4j.category = WARN, DBAppndr, console
log4j.category = WARN, DBAppndr
log4j.appender.DBAppndr = org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DBAppndr.URL = jdbc:CSV:testdb://localhost:9999;f_dir=t/tmp
log4j.appender.DBAppndr.user = bobjones
log4j.appender.DBAppndr.password = 12345
log4j.appender.DBAppndr.sql = \\
insert into $table_name \\
(loglevel, message, shortcaller, thingid, category, pkg, runtime1, runtime2) \\
values (?,?,?,?,?,?,?,?)
log4j.appender.DBAppndr.params.1 = %p
#---------------------------- #2 is message
log4j.appender.DBAppndr.params.3 = %5.5l
#---------------------------- #4 is thingid
log4j.appender.DBAppndr.params.5 = %c
log4j.appender.DBAppndr.params.6 = %C
#-----------------------------#7,8 are also runtime
log4j.appender.DBAppndr.bufferSize=3
log4j.appender.DBAppndr.warp_message=0
#noop layout to pass it through
log4j.appender.DBAppndr.layout = Log::Log4perl::Layout::NoopLayout
#a console appender for debugging
log4j.appender.console = Log::Log4perl::Appender::Screen
log4j.appender.console.layout = Log::Log4perl::Layout::SimpleLayout
EOT
Log::Log4perl::init(\$config);
# *********************
# check a category logger
my $logger = Log::Log4perl->get_logger("groceries.beer");
#$logger->fatal('fatal message',1234,'foo','bar');
$logger->fatal('fatal message',1234,'foo', 'bar');
$logger->warn('warning message',3456,'foo','bar');
$logger->debug('debug message',99,'foo','bar');
my $sth = $dbh->prepare("select * from $table_name");
$sth->execute;
my $row = $sth->fetchrow_arrayref;
is($row->[0], 'FATAL');
is($row->[1], 'fatal message');
is($row->[3], '1234');
is($row->[4], 'groceries.beer');
is($row->[5], 'main');
is($row->[6], 'foo');
is($row->[7], 'bar');
$row = $sth->fetchrow_arrayref;
is($row->[0], 'WARN');
is($row->[1], 'warning message');
is($row->[3], '3456');
is($row->[4], 'groceries.beer');
is($row->[5], 'main');
is($row->[6], 'foo');
is($row->[7], 'bar');
$dbh->do("DROP TABLE $table_name");
1;
|