情况:cron工作已经凌晨1点运行了大约5年。创建主日志和数百个子日志(从远程位置提取数据)。
从12月31日开始:而不是通常的200Kb文件,它们现在是0Kb。作业仍然按预期工作但不生成日志数据。所有子日志都已创建,但也是0Kb。
如果作业是通过交互式shell运行的,那么它可以正常工作。
我看过的内容:
我已将测试减少到大约10行代码 - 启动,设置日志,写入日志以及stdout和退出。 Stdout给出了我在任何一种情况下的期望(管道标准输出和stderr到文件)。日志文件仅在通过交互式shell运行时具有内容。
我错过了什么?
系统正在运行RHEL 5.x服务器(x64)
编辑:这是日志文件追加器的设置方式:
sub initLogging
{
my $self = shift;
my $logFileInfo = shift;
my $dataDir = $self->{ 'localDir' };
my $logger = get_logger( "Home" . $self->{ 'homeId' } );
my $appender = Log::Log4perl::Appender->new(
"Log::Log4perl::Appender::File",
filename => "${dataDir}/log/$logFileInfo.log" );
my $layout = Log::Log4perl::Layout::PatternLayout->new( "[%d{yyyy.MMM.dd HH:mm:ss Z}] %p %c - %m%n" );
$appender->layout( $layout );
$appender->threshold( $INFO );
$logger->add_appender( $appender );
my $appender0 = Log::Log4perl::Appender->new( "Log::Log4perl::Appender::Screen",
name => 'screenlog',
stderr => 0);
$appender0->layout( $layout );
$appender0->threshold( $FATAL );
$logger->add_appender( $appender0 );
$self->{ 'logger' } = $logger;
}
致电计划:
#!/usr/bin/perl -w
use pull_common;
use DBI;
use strict;
print "start\n";
# build the main log file name
my @dt = localtime();
my $logFile = sprintf("justtesting-%04d%02d%02d-%02d%02d%02d", $dt[5] + 1900, $dt[4] + 1, $dt[3], $dt[2], $dt[1], $dt[0] );
my $common = new pull_common( );
$common->{ 'homeId' } = 0;
$common->initLogging( $logFile );
my $logger = $common->{ 'logger' };
$logger->info( "this is a test. This is only a test. Remain calm." );
print "end\n";
答案 0 :(得分:2)
FWIW:看来我一直在玩“快速而宽松”。与Log4perl
多年。有些东西得到了更新,初始化库的要求开始得到强制执行。
简答:在致电Log::Log4perl->easy_init( $DEBUG );
之前,先致电get_logger()
。然后添加你的appender(在你想要的任何级别),你应该很高兴。