Hi all, In order to log to a tmp directory (that we want to remove later), we create an appender in a script that we add to our project's loggers:
Log::Log4perl->init_and_watch($path_conf."/log.conf", 'HUP'); # HUP needed for logrotate my $logger = get_logger($FindBin::Script); my $logger_all = Log::Log4perl->get_logger("OurProject"); # Local appender to log in tmp directory. my $local_appender; my $local_appender_name = 'LogTmp'; ... # Create appender to log error in tmp directory. $local_appender = Log::Log4perl::Appender->new( "Log::Log4perl::Appender::File", name => $local_appender_name, filename => "$spool_tmp/error.log", mode => 'write', syswrite => 1, utf8 => 1, ); my $layout = Log::Log4perl::Layout::PatternLayout->new("%d %P %p> %F{1}:%L %M - %m%n"); $local_appender->layout($layout); $local_appender->threshold($CFG{'l4p_appender_logtmp_threshold'}); $logger->add_appender($local_appender); $logger_all->add_appender($local_appender); # add appender to project modules' logger ... $logger->remove_appender($local_appender_name); $logger_all->remove_appender($local_appender_name); rmtree($spool_tmp, {error => \my $err}); if (@$err) { file_path_error($err); exit; } $logger->info("removed $spool_tmp"); But rmtree() (File::Path) is complaining that $spool_tmp is not empty. $spool_tmp is on an NFS mount. So we solved the pb with: #$logger->remove_appender($local_appender_name); #$logger_all->remove_appender($local_appender_name); # "will first remove the appender from every logger in the system and then # will delete all references Log4perl holds to it." (Log::Log4perl) Log::Log4perl->eradicate_appender($local_appender_name); # ...but the appender is still alive and keeps filehandles open. So we need # to close them explicitly. Especially under NFS, where deleted but still # opened files are kept by the kernel as '.nfsxxx' (see "NFS silly # rename") $local_appender->file_close(); # (undocumented, look into the code) rmtree($spool_tmp, {error => \my $err}); if (@$err) { file_path_error($err); exit; } $logger->info("removed $spool_tmp"); My guess may be wrong, and I'd be interested to know if there is a better solution. Best Foudil ------------------------------------------------------------------------------ This SF.net email is sponsored by Sprint What will you do first with EVO, the first 4G phone? Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first _______________________________________________ log4perl-devel mailing list log4perl-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/log4perl-devel