【问题标题】:Dynamically Change email config for Log::Dispatch::Email::MailSender动态更改 Log::Dispatch::Email::MailSender 的电子邮件配置
【发布时间】:2015-05-06 21:07:10
【问题描述】:

我已将我的登录切换为使用 Log::Log4perl,但我很难使用 Log::Dispatch::Email::MailSender 用于发送电子邮件日志。下面的代码 sn-p 是我的工作示例。

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->get_logger(); to some_func 我不知道为什么它不能使用全球版本
  2. 如何访问记录器配置,以便在执行期间更改电子邮件主题以指示成功或失败。我基本上想在我的脚本中更改主题或动态地址

作为上面 Q2 在我的主程序中的解决方法,我现在使用 Log::Log4perl::Appender::String 来存储消息,然后使用 MIME::Lite 在我的脚本末尾发送一封电子邮件。我希望这一切都由记录器处理。 谢谢

【问题讨论】:

    标签: perl perl-module log4perl


    【解决方案1】:

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

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

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

    sub getEmailSubject {   
        return "whatever I want";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 2022-07-26
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      相关资源
      最近更新 更多