summaryrefslogtreecommitdiff
path: root/t/035JDBCAppender.t
diff options
context:
space:
mode:
Diffstat (limited to 't/035JDBCAppender.t')
-rw-r--r--t/035JDBCAppender.t144
1 files changed, 144 insertions, 0 deletions
diff --git a/t/035JDBCAppender.t b/t/035JDBCAppender.t
new file mode 100644
index 0000000..868b3d9
--- /dev/null
+++ b/t/035JDBCAppender.t
@@ -0,0 +1,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 = \%Log::Log4perl::Internal::Test::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;