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