package DJabberd::Log::Junk;
use Log::Log4perl qw(:resurrect);
package DJabberd::Log;
use strict;
use warnings;
no warnings 'redefine';
our $has_run;
our $logger;
sub get_logger {
my ($class, $category) = @_;
my ($package, $filename, $line) = caller;
my $autostarted = 0;
unless ($has_run) {
my @locations = (
"etc/log.conf",
"/etc/djabberd/log.conf",
"etc/log.conf.default"
);
DJabberd::Log->set_logger(@locations);
$autostarted = 1;
}
my $ret = Log::Log4perl->get_logger($category || $package);
# Let user know that we've used the hardcoded list of locations from above
# rather than any special settings he might have wanted.
$ret->logwarn("Logger was started on demand from ", $filename, " line ", $line) if $autostarted;
return $ret;
}
sub set_logger {
my ($class, @locations) = @_;
my $used_file;
@locations = () if $ENV{LOGLEVEL};
foreach my $conffile (@locations) {
next unless -e $conffile;
Log::Log4perl->init_and_watch($conffile, 1);
$logger = Log::Log4perl->get_logger();
$used_file = $conffile;
last;
}
my $loglevel = $ENV{LOGLEVEL} || "WARN";
unless ($used_file) {
my $conf = qq{
log4perl.logger.DJabberd = $loglevel, screen
log4perl.logger.DJabberd.Hook = $loglevel
# This psuedo class is used to control if raw XML is to be showed or not
# at DEBUG it shows all raw traffic
# at INFO it censors out the actual data
log4perl.logger.DJabberd.Connection.XML = $loglevel
log4perl.appender.screen = Log::Log4perl::Appender::ScreenColoredLevels
log4perl.appender.screen.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.screen.layout.ConversionPattern = %P %-5p %-40c %m %n
};
Log::Log4perl->init(\$conf);
$logger = Log::Log4perl->get_logger();
$used_file = "BUILT-IN-DEFAULTS";
}
$logger->info("Started logging using '$used_file'");
$has_run++;
}
# Local Variables:
# mode: perl
# c-basic-indent: 4
# indent-tabs-mode: nil
# End:
1;