【问题标题】:Trying to use Log-Log4perl, but the file is empty (0 length)尝试使用 Log-Log4perl,但文件为空(0 长度)
【发布时间】:2012-01-22 13:15:14
【问题描述】:

我正在尝试在我的 Perl 脚本中使用 Log-Log4perl 模块。一切正常,但日志记录不起作用。 这是我的代码:

sub create_log
{
    BEGIN
    {
        eval
        {
            require Log::Log4perl;
        };
        if( $@ )
        {
            print "Log::Log4perl module not installed - stubbing.\n";
            no strict qw( refs );
            *{"main::$_"} = sub {} for qw( DEBUG INFO WARN ERROR FATAL );
        }
        else
        {
            print "Log::Log4perl module installed.\n";
            require Log::Log4perl::Level;
            Log::Log4perl::Level->import( __PACKAGE__ );
            my $conf = q(
                log4perl.category.My.Script = INFO, FileApp, Screen
                log4perl.appender.FileApp = Log::Log4perl::Appender::File
                log4perl.appender.FileApp.mode = append
                log4perl.appender.FileApp.syswrite = 1
                log4perl.appender.FileApp.filename = my.log
                log4perl.appender.FileApp.layout = PatternLayout
                log4perl.appender.FileApp.layout.ConversionPattern = [%p][%d]{%F line %L} %m%n %d> %m%n
                log4perl.appender.Screen = Log::Log4perl::Appender::Screen
                log4perl.appender.Screen.stderr = 0
                log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout
                    );
            Log::Log4perl->init( \$conf );
        }
    }
}

create_log();
$logger = Log::Log4perl->get_logger( "My;:Script" );
%month_nums = ("Jan" => 1, "Feb" => 2, "Mar" => 3, "Apr" => 4, May  => 5, "Jun" => 6, "Jul" => 7, "Aug" => 8, "Sep" => 9, "Oct" => 10, "Nov" => 11, "Dec" => 12);
$tries = 1;
$company_fetched = 0;
$logger->logdie( "\n" ) if !getopts( "w:f:", \%options );
$logger->logdie( "Incompatible options." ) if $options{'w'} && $options{'f'};

在运行脚本并同时提供 -w 和 -f 时,我在屏幕上看到如下错误:

Incompatible options. at /usr/lib/perl5/vendor_perl/5.12.2/Log/Log4perl/Logger.pm line 887

有什么建议吗?

【问题讨论】:

  • 使用子块或BEGIN 块,但不能同时使用。
  • 好吧,用sub比较容易,所以我把“BEGIN”去掉。谢谢。

标签: perl logging


【解决方案1】:

看起来像是一个错字:

$logger = Log::Log4perl->get_logger( "My;:Script" );

应该是

$logger = Log::Log4perl->get_logger( "My::Script" );

【讨论】:

  • 是的,就是这样。但是,我仍然收到“Logger.pm line 887”消息。任何想法?如果我需要以这种方式使用它 sub foo { $logger->get_logger();评估 { $logger->info(); }; if($@){}},你在哪里调用 get_logger?谢谢。
猜你喜欢
  • 2020-09-21
  • 2022-01-08
  • 1970-01-01
  • 2021-08-12
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多