1package Log::Log4perl::JavaMap::JDBCAppender; 2 3use Carp; 4use strict; 5 6sub new { 7 my ($class, $appender_name, $data) = @_; 8 my $stderr; 9 10 my $pwd = $data->{password}{value} || 11 die "'password' not supplied for appender '$appender_name', required for a '$data->{value}'\n"; 12 13 my $username = $data->{user}{value} || 14 $data->{username}{value} || 15 die "'user' not supplied for appender '$appender_name', required for a '$data->{value}'\n"; 16 17 18 my $sql = $data->{sql}{value} || 19 die "'sql' not supplied for appender '$appender_name', required for a '$data->{value}'\n"; 20 21 22 my $dsn; 23 24 my $databaseURL = $data->{URL}{value}; 25 if ($databaseURL) { 26 $databaseURL =~ m|^jdbc:(.+?):(.+?)://(.+?):(.+?);(.+)|; 27 my $driverName = $1; 28 my $databaseName = $2; 29 my $hostname = $3; 30 my $port = $4; 31 my $params = $5; 32 $dsn = "dbi:$driverName:database=$databaseName;host=$hostname;port=$port;$params"; 33 }elsif ($data->{datasource}{value}){ 34 $dsn = $data->{datasource}{value}; 35 }else{ 36 die "'databaseURL' not supplied for appender '$appender_name', required for a '$data->{value}'\n"; 37 } 38 39 40 #this part isn't supported by log4j, it's my Log4perl 41 #hack, but I think it's so useful I'm going to implement it 42 #anyway 43 my %bind_value_params; 44 foreach my $p (keys %{$data->{params}}){ 45 $bind_value_params{$p} = $data->{params}{$p}{value}; 46 } 47 48 return Log::Log4perl::Appender->new("Log::Log4perl::Appender::DBI", 49 datasource => $dsn, 50 username => $username, 51 password => $pwd, 52 sql => $sql, 53 params => \%bind_value_params, 54 #warp_message also not a log4j thing, but see above 55 warp_message=> $data->{warp_message}{value}, 56 ); 57} 58 591; 60 61=head1 NAME 62 63Log::Log4perl::JavaMap::JDBCAppender - wraps Log::Log4perl::Appender::DBI 64 65=head1 SYNOPSIS 66 67 68=head1 DESCRIPTION 69 70Possible config properties for log4j JDBCAppender are 71 72 bufferSize 73 sql 74 password 75 user 76 URL - attempting to translate a JDBC URL into DBI parameters, 77 let me know if you find problems 78 79Possible config properties for Log::Log4perl::Appender::DBI are 80 81 bufferSize 82 sql 83 password 84 username 85 datasource 86 87 usePreparedStmt 0|1 88 89 (patternLayout).dontCollapseArrayRefs 0|1 90 91 92=head1 SEE ALSO 93 94http://jakarta.apache.org/log4j/docs/ 95 96Log::Log4perl::Javamap 97 98Log::Log4perl::Appender::DBI 99 100=head1 LICENSE 101 102Copyright 2002-2012 by Mike Schilli E<lt>m@perlmeister.comE<gt> 103and Kevin Goess E<lt>cpan@goess.orgE<gt>. 104 105This library is free software; you can redistribute it and/or modify 106it under the same terms as Perl itself. 107 108=head1 AUTHOR 109 110Please contribute patches to the project on Github: 111 112 http://github.com/mschilli/log4perl 113 114Send bug reports or requests for enhancements to the authors via our 115 116MAILING LIST (questions, bug reports, suggestions/patches): 117log4perl-devel@lists.sourceforge.net 118 119Authors (please contact them via the list above, not directly): 120Mike Schilli <m@perlmeister.com>, 121Kevin Goess <cpan@goess.org> 122 123Contributors (in alphabetical order): 124Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton 125Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony 126Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy 127Grundman, Paul Harrington, David Hull, Robert Jacobson, Jason Kohles, 128Jeff Macdonald, Markus Peter, Brett Rann, Peter Rabbitson, Erik 129Selberg, Aaron Straup Cope, Lars Thegler, David Viner, Mac Yang. 130 131