原來的問題已經被改寫,要明確供以後使用爲什麼Log4perl PatternLayout中的%M和%F在特殊情況下有所不同?
我發現下面的問題是怪異。在某些情況下,%M和%F表示不同的文件。例如詮釋下面的情況:
Foo.pm包含
use warnings;
sub x { 2; 1; }
1;
test.pl包含
#!/usr/bin/perl
use Log::Log4perl qw/:easy/;
Log::Log4perl->easy_init({ file => 'STDOUT', layout => '[%p{1}] %m{chomp} [%l]%n' });
$::log = Log::Log4perl->get_logger;
local $SIG{__WARN__} = sub {
local $Log::Log4perl::caller_depth = $Log::Log4perl::caller_depth + 1;
$::log->warn(shift);
};
require "Foo.pm";
的結果是:
[W] Useless use of a constant in void context at Foo.pm line 2. [main:: Foo.pm (2)]
所以文件「Foo.pm「,但功能是」main ::「。
我發現奇怪的行爲與「require」編譯時發生的錯誤/警告有關。
爲什麼%M和%F有區別?
感謝,FERcsI
什麼perl的版本? – ysth
只是一個小的擴展:其實$ SIG {__ WARN__}使用$ log-> warn和$ SIG {__ DIE__}使用$ log->錯誤,但是那裏的藝術沒有更多的區別... – FERcsI
我使用的Perl版本是5.16 ... – FERcsI