2011-12-17 10 views
-3

私のPerlスクリプトでLog-Log4perlモジュールを使用しようとしています。すべてが機能しますが、ログは記録されません。 Log-Log4perlを使用しようとしましたが、ファイルが空です(長さ0)

sub create_log 
{ 
    BEGIN 
    { 
     eval 
     { 
      require Log::Log4perl; 
     }; 
     if([email protected]) 
     { 
      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'}; 

は、スクリプトを実行しているし、私はこのような画面にエラーが表示さ-f供給の両方-wと::

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

任意の提案をここに は私のコードですか?

+0

使用する必要があります。 – dolmen

+0

OK、サブを使う方が簡単ですので、私は "BEGIN"を取り除きます。どうも。 – Igor

答えて

2

は、タイプミスのように見える:

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

は、サブブロックまたは `BEGIN`ブロック、どちらか一方だけ

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

+1が見つかりました。 – bvr

+0

はい、それでした。しかし、私はまだ "Logger.pm line 887"というメッセージを受け取ります。何か案が?そして、もし私がそれをこの方法で使う必要があれば、サブfoo {$ logger-> get_logger(); eval {$ logger-> info(); }; if($ @){}}、どこにget_loggerを呼び出しますか?ありがとうございました。 – Igor

関連する問題