0

log4perl を使用してすべてをファイルに記録する Perl スクリプトがあります。log4perl の設定は外部ファイルに保存されます。

このスクリプトは、qx を使用して mysqldump コマンドを実行します。mysqldump コマンドの出力は画面に出力されますが (STDERR を想定しています)、ログ ファイルには出力されません。

mysqldump (および画面に出力されるその他の stmt) の出力を log4perl ログ ファイルに送りたいと思います。

これに qx 以外のものを使用するか、log4perl の設定を変更する必要があるかどうかはわかりません。

注: このオンラインの例をいくつか見たことがありますが、それらはすべて log4perl easy-config を使用しています。

ここに log4perl 設定ファイルがあります -

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

これがperlスクリプトです-

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 ($@) {
    $logp->error( 'error: ', $@ );
}
$logp->info("end backup script");

スクリプトの出力は次のとおりです-

[root@localhost 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

明確化 - 出力とは、mysqldump コマンドの stderr 出力を意味します。画面に表示される mysqldump コマンドのすべてのテキスト出力を log4perl ログ ファイルに送信する必要があります。

4

1 に答える 1