# To make Log4perl not crash your application if your logging director
+y doesn't exist, include something like this in a wrapper file.
INIT: while ( !$init_done ) {
$init_done = eval { Log::Log4perl->init($conf_file_name); 1; };
if ($@) {
warn "Logger error was: $@";
# Config file error of some kind
# Send some alert message here, somehow
# if we get a missing directory error, try some (sane) recover
+y
# error message looks like:
# Can't open <PATH> (No such file or directory) at perl/site/l
+ib/Log/Log4perl/Appender/File.pm line 102.
if ( $@ =~ m{Can't\sopen\s$base_path(.+)/[^/]+\s\(No such file
+ or directory\)} ) {
my $path = $1;
$path = $base_path . $path; # if the base path isn't th
+ere, creating it is above this module's pay grade
warn "log directory $path does not exist, attempting to cr
+eate it";
if ( $paths{$path}++ ) { # only try once to create a
+ given path. This prevents infinite loops here
warn "alredy tried to create this path";
last INIT;
}
eval { mkpath($path) };
warn "unable to create path $path" if ( !-d $path );
}
# for other config file errors, throw our hands up in disgust
+and move on
else {
last INIT;
}
}
}# if we couldn't get the config file to initlize, load a blank one an
+d move on without logging
if ( ! $init_done ) {
warn "Couldn't initilize logger, defaulting to blank config file";
Log::Log4perl::init(\''); # this will throw a warning, but that's
+not really a bad thing
}