home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2004 December / PCpro_2004_12.ISO / files / webserver / tsw / TSW_3.4.0.exe / Apache2 / perl / JDBCAppender.pm < prev    next >
Encoding:
Perl POD Document  |  2003-01-23  |  2.6 KB  |  109 lines

  1. package Log::Log4perl::JavaMap::JDBCAppender;
  2.  
  3. use Carp;
  4. use strict;
  5. use Log::Dispatch::File;
  6.  
  7.  
  8. sub new {
  9.     my ($class, $appender_name, $data) = @_;
  10.     my $stderr;
  11.  
  12.     my $pwd =  $data->{password}{value} || 
  13.                 die "'password' not supplied for appender '$appender_name', required for a '$data->{value}'\n";
  14.  
  15.     my $username =  $data->{user}{value} || 
  16.                 $data->{username}{value} || 
  17.                 die "'user' not supplied for appender '$appender_name', required for a '$data->{value}'\n";
  18.  
  19.  
  20.     my $sql =  $data->{sql}{value} || 
  21.                 die "'sql' not supplied for appender '$appender_name', required for a '$data->{value}'\n";
  22.  
  23.  
  24.     my $dsn;
  25.  
  26.     my $databaseURL = $data->{URL}{value};
  27.     if ($databaseURL) {
  28.         $databaseURL =~ m|^jdbc:(.+?):(.+?)://(.+?):(.+?);(.+)|;
  29.         my $driverName = $1;
  30.         my $databaseName = $2;
  31.         my $hostname = $3;
  32.         my $port = $4;
  33.         my $params = $5;
  34.         $dsn = "dbi:$driverName:database=$databaseName;host=$hostname;port=$port;$params";
  35.     }elsif ($data->{datasource}{value}){
  36.         $dsn = $data->{datasource}{value};
  37.     }else{
  38.         die "'databaseURL' not supplied for appender '$appender_name', required for a '$data->{value}'\n";
  39.     }
  40.  
  41.  
  42.     #this part isn't supported by log4j, it's my Log4perl
  43.     #hack, but I think it's so useful I'm going to implement it
  44.     #anyway
  45.     my %bind_value_params;
  46.     foreach my $p (keys %{$data->{params}}){
  47.         $bind_value_params{$p} =  $data->{params}{$p}{value};
  48.     }
  49.  
  50.     return Log::Log4perl::Appender->new("Log::Log4perl::Appender::DBI",
  51.         datasource    => $dsn,
  52.         username      => $username,
  53.         password      => $pwd, 
  54.         sql           => $sql,
  55.         params        => \%bind_value_params,
  56.             #warp_message also not a log4j thing, but see above
  57.         warp_message=> $data->{warp_message}{value},  
  58.     );
  59. }
  60.  
  61. 1;
  62.  
  63. =head1 NAME
  64.  
  65. Log::Log4perl::JavaMap::JDBCAppender - wraps Log::Log4perl::Appender::DBI
  66.  
  67. =head1 SYNOPSIS
  68.  
  69.  
  70. =head1 DESCRIPTION
  71.  
  72. Possible config properties for log4j JDBCAppender are 
  73.  
  74.     bufferSize 
  75.     sql
  76.     password
  77.     user
  78.     URL - attempting to translate a JDBC URL into DBI parameters,
  79.         let me know if you find problems
  80.  
  81. Possible config properties for Log::Log4perl::Appender::DBI are
  82.  
  83.     bufferSize 
  84.     sql
  85.     password
  86.     username
  87.     datasource
  88.     
  89.     usePreparedStmt 0|1
  90.     
  91.     (patternLayout).dontCollapseArrayRefs 0|1
  92.     
  93.     
  94. =head1 AUTHORS
  95.  
  96.     Kevin Goess, <cpan@goess.org> 
  97.     
  98.     December, 2002
  99.  
  100. =head1 SEE ALSO
  101.  
  102. http://jakarta.apache.org/log4j/docs/
  103.  
  104. Log::Log4perl::Javamap
  105.  
  106. Log::Log4perl::Appender::DBI
  107.  
  108. =cut
  109.