动态更改Log :: Dispatch :: Email :: MailSender

时间:2015-05-06 21:07:11

标签: perl perl-module log4perl

我已经将我的loggin切换为使用Log :: Log4perl并且我很难使用 Log :: Dispatch :: Email :: 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. 为什么记录器不发送电子邮件,除非我通过添加我的$ logger = Log :: Log4perl-&gt; get_logger()添加本地记录器; to some_func我不知道为什么它不能使用全球版
  2. 如何访问记录器配置,以便我可以在执行期间更改电子邮件主题,以表示成功或失败。我基本上想要改变主题或在我的脚本中动态地解决的问题
  3. 作为我主程序中上面的Q2的解决方法,我现在使用Log :: Log4perl :: Appender :: String来存储消息,然后你使用MIME :: Lite在我的脚本末尾发送一封电子邮件。我更希望这一切都由记录器处理。 谢谢

1 个答案:

答案 0 :(得分:1)

不太明白你的问题#1,但对于问题#2:你可以在log4perl.properties中添加这一行:

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

然后在代码中添加一个子程序:

sub getEmailSubject {   
    return "whatever I want";
}