Как заставить Log4Perl использовать отдельные файлы для каждого скрипта? - PullRequest
2 голосов
/ 07 июля 2011

В FAQ для Log4perl объясняется, как написать файл конфигурации для использования отдельных файлов для ОШИБКИ и ИНФО.

Это прекрасно работает для одного сценария или если вы хотите смешатьнесколько сценариев ERROR и INFO в одном журнале ERROR и INFO.

Вопрос

Мне бы очень хотелось, чтобы каждый сценарий имел свои собственные файлы ERROR и INFO, и что явсе еще могут просто использовать

$logger->info()
$logger->error()

Правильно ли я сделал log.conf правильно?

И как мне инициировать Log4perl в каждом скрипте?

учетная запись.pl

use Log::Log4perl;
Log::Log4perl::init('log.conf');
my $logger = Log::Log4perl->get_logger('????');

log.conf

log4perl.logger.account = INFO, AccountErrorLogFile, AccountInfoLogFile, AccountInfoLogFile, SystemErrorLogFile, testScreen

# Filter to match level ERROR
log4perl.filter.MatchError = Log::Log4perl::Filter::LevelMatch
log4perl.filter.MatchError.LevelToMatch  = ERROR
log4perl.filter.MatchError.AcceptOnMatch = true

# Filter to match level INFO
log4perl.filter.MatchInfo  = Log::Log4perl::Filter::LevelMatch
log4perl.filter.MatchInfo.LevelToMatch  = INFO
log4perl.filter.MatchInfo.AcceptOnMatch = true

# Error appender
log4perl.appender.AccountErrorLogFile                          = Log::Log4perl::Appender::File
log4perl.appender.AccountErrorLogFile.filename                 = /logs/error--account-pl.log
log4perl.appender.AccountErrorLogFile.layout                   = Log::Log4perl::Layout::PatternLayout
log4perl.appender.AccountErrorLogFile.layout.ConversionPattern = %d [%3L] %m%n
log4perl.appender.AccountErrorLogFile.Filter                   = MatchError

# Info appender
log4perl.appender.AccountInfoLogFile                          = Log::Log4perl::Appender::File
log4perl.appender.AccountInfoLogFile.filename                 = /logs/info--account-pl.log
log4perl.appender.AccountInfoLogFile.layout                   = Log::Log4perl::Layout::PatternLayout
log4perl.appender.AccountInfoLogFile.layout.ConversionPattern = %d [%3L] %m%n
log4perl.appender.AccountInfoLogFile.Filter                   = MatchInfo

# Error appender
log4perl.appender.SystemErrorLogFile                          = Log::Log4perl::Appender::File
log4perl.appender.SystemErrorLogFile.filename                 = /logs/error--system-pl.log
log4perl.appender.SystemErrorLogFile.layout                   = Log::Log4perl::Layout::PatternLayout
log4perl.appender.SystemErrorLogFile.layout.ConversionPattern = %d [%3L] %m%n
log4perl.appender.SystemErrorLogFile.Filter                   = MatchError

# Info appender
log4perl.appender.SystemInfoLogFile                          = Log::Log4perl::Appender::File
log4perl.appender.SystemInfoLogFile.filename                 = /logs/info--system-pl.log
log4perl.appender.SystemInfoLogFile.layout                   = Log::Log4perl::Layout::PatternLayout
log4perl.appender.SystemInfoLogFile.layout.ConversionPattern = %d [%3L] %m%n
log4perl.appender.SystemInfoLogFile.Filter                   = MatchInfo

# Development Appender
log4perl.appender.testScreen                          = Log::Log4perl::Appender::Screen
log4perl.appender.testScreen.stderr                   = 0
log4perl.appender.testScreen.layout                   = Log::Log4perl::Layout::PatternLayout
log4perl.appender.testScreen.layout.ConversionPattern = %-5p [%3L] %m%n

1 Ответ

6 голосов
/ 07 июля 2011

Решение:

log.conf

log4perl.logger.account = INFO, AccountErrorLogFile, AccountInfoLogFile, testScreen
log4perl.logger.system  = INFO, SystemErrorLogFile, SystemInfoLogFile, testScreen

account.pl

Log::Log4perl::init('/var/www/useradmin/cgi-bin/log.conf');
my $logger = Log::Log4perl->get_logger('account');

system.pl

Log::Log4perl::init('/var/www/useradmin/cgi-bin/log.conf');
my $logger = Log::Log4perl->get_logger('system');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...