2015-05-06 4 views
1

Я переключил свой логин на использование Log :: Log4perl и Im с трудом использовал Log :: Dispatch :: Email :: MailSender для журналов электронной почты , Ниже приведен мой фрагмент кода.Динамически изменить конфигурацию электронной почты для журнала :: 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. почему регистратор не отправлять электронную почту, если я не добавить получить регистратор локально, добавив свой $ логгер = Бревенчатые :: Log4perl-> get_logger(); to some_func Я не уверен, почему он не может использовать глобальную версию
  2. Как получить доступ к конфигурации регистратора, чтобы я мог изменить тему письма во время выполнения, скажем, чтобы указать успех или неудачу. Я в принципе хочу, чтобы изменить положение вещей, как предмет или обратиться динамически в моем сценарии

В качестве временного решения для Q2 выше в моей основной программе я теперь использовать Вход :: Log4perl :: Appender :: Строка для сохранения сообщения и затем ues отправляет электронное письмо в конце моего скрипта, используя MIME :: Lite. Я бы предпочел, чтобы все это обрабатывалось регистратором. Благодаря

ответ

1

Не совсем понимаю ваш вопрос # 1, но вопрос № 2: Вы можете добавить эту строку в log4perl.properties:

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

затем добавить подпрограмму в коде:

sub getEmailSubject { 
    return "whatever I want"; 
}