2015-05-06 83 views
1

我轉我的洛使用日誌:: Log4perl和Im使用 登錄::調度::電子郵件:: MailSender通過電子郵件發送日誌不好受。下面的代碼片段是我的工作示例。動態改變的電子郵件配置日誌::調度::電子郵件:: MailSender

use Log::Log4perl qw(get_logger :levels); 

my $log4perl_conf=<<CFG 
log4perl.rootLogger=INFO, Email 
log4perl.appender.Email=Log::Dispatch::Email::MailSender 
log4perl.appender.Email.to=me\@me.com 
log4perl.appender.Email.from=me\@me.com 
log4perl.appender.Email.smtp=smtp.me.com 
log4perl.appender.Email.min_level=info 
log4perl.appender.Email.layout=Log::Log4perl::Layout::PatternLayout 
log4perl.appender.Email.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:s 
+s} [%F{1}:%c{1}] %5p> %m%n 
CFG 
; 

Log::Log4perl::init(\$log4perl_conf); 
my $logger = Log::Log4perl->get_logger(); 

$logger->info('The first message bla bla'); 
$logger->info('The second message bla bla'); 
some_func(); 

sub some_func { 
    my $logger = Log::Log4perl->get_logger(); 
    $logger->info("some_func was called"); 

} 

這裏是我的問題:

  1. 爲什麼,除非我補充加入我的$記錄器獲取本地記錄器記錄器不發送電子郵件=登錄:: Log4perl-> get_logger();到some_func林不知道爲什麼不能使用的全球版本
  2. 我如何獲得訪問記錄儀的配置,所以我可以改變執行過程中,電子郵件的主題說的指示成功或失敗。基本上,我想改變的東西像主題或在我的主要程序在我的腳本

動態地址作爲Q2解決方法上面我現在用的登錄:: Log4perl :: Appender的::字符串存儲消息和那麼你使用MIME :: Lite在我的腳本結尾處發送一封電子郵件。我寧願將這一切都由記錄器處理。 感謝

回答

1

不太明白你的問題#1,但對於問題2:您可以添加該線路log4perl.properties:

log4perl.appender.Email.subject = sub { return getEmailSubject(); } 

然後在代碼中添加一個子程序:

sub getEmailSubject { 
    return "whatever I want"; 
}