나는 log4perl을 사용하여 모든 것을 파일에 기록하는 펄 스크립트를 가지고있다. log4perl의 구성은 외부 파일에 저장됩니다.mysqldump가 log4perl로 출력
이 스크립트는 qx를 사용하여 mysqldump 명령을 실행합니다. mysqldump 명령의 출력은 화면에 출력되지만 (STDERR로 가정) 로그 파일에는 출력되지 않습니다.
mysqldump (및 화면에 출력되는 다른 모든 stmt)의 출력을 log4perl 로그 파일로 보내고 싶습니다.
qx가 아닌 다른 것을 사용하거나 log4perl config를 변경해야하는지 잘 모르겠습니다.
참고 : 일부 온라인 예제를 보았지만 모두 log4perl easy-config를 사용합니다.
[[email protected] perl]# perl test.pl
2013/04/24 16:35:33 3 INFO test.pl main::.22 - start backup script
2013/04/24 16:35:33 4 INFO test.pl create_backup.16 - creating temp mysqldump...
-- Connecting to localhost...
-- Disconnecting from localhost...
2013/04/24 16:35:33 22 INFO test.pl main::.29 - end backup script
대한 설명 - - 여기
use strict;
use warnings 'FATAL' => 'all';
use Sys::Hostname;
use Log::Log4perl;
my $log_conf = "log4perl.conf";
Log::Log4perl::init($log_conf);
my $logp = Log::Log4perl->get_logger();
my $dirTemp = "temp";
my $fileTemp = "temp_backup.gz";
my $dbSchema = 'test';
my $dbToken01 = 'root';
my $dbToken02 = 'haha';
sub create_backup {
$logp->info("creating temp mysqldump...");
my $backupCmd = "mysqldump -R --triggers -u $dbToken01 -p$dbToken02 -v --quick --single-transaction $dbSchema | gzip > $dirTemp/$fileTemp";
qx($backupCmd);
}
#main
$logp->info("start backup script");
eval {
create_backup();
};
if ([email protected]) {
$logp->error('error: ', [email protected]);
}
$logp->info("end backup script");
스크립트의 출력 - 여기
log4perl.rootLogger = DEBUG, SCREEN, file
log4perl.appender.SCREEN = Log::Log4perl::Appender::Screen
log4perl.appender.SCREEN.stderr = 0
log4perl.appender.SCREEN.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.SCREEN.layout.ConversionPattern = %d %r %p %F{1} %M{1}.%L - %m%n
log4perl.appender.file = Log::Log4perl::Appender::File
log4perl.appender.file.filename = log/mbackup.log
log4perl.appender.file.mode = append
log4perl.appender.file.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.file.layout.ConversionPattern = %d %r %p{5} %F{1} %M{1}.%L - %m%n
는 펄 스크립트입니다 - 여기
는 log4perl 설정 파일이다 내가 말했을 때 출력 , 나는 mysqldump 명령의 stderr 출력을 의미했다. 화면에 쓰여진 mysqldump 명령어의 모든 텍스트 출력을 log4perl 로그 파일로 보내기를 원한다. 당신이 모두를 수행 할 경우
출력물은 무엇입니까? mysqldump의 모든 출력을'gzip> somefile'으로 파이핑합니다. – chrsblck
명확한 설명을 위해 저의 해결책이 무엇입니까. 모든 출력을 캡처하여 기록합니다. – chrsblck