我有一个Perl脚本,它可以处理十个文本文件,并在成功操作后为每个文本文件创建一个日志文件。
但如果我再次运行该脚本,它将覆盖任何现有的日志文件。
如何为备份目的实现某些版本控制,以便在脚本再次运行时可以创建新的日志文件而不会覆盖以前的日志文件?
我正在考虑每次运行脚本时生成时间戳,但不确定这是否有效。
答案 0 :(得分:2)
Log::Dispatch
或Log::Log4perl
可用于访问此类功能。
具体而言,您可以使用Log::Dispatch::File::Rolling
或Log::Dispatch::File::Stamped
答案 1 :(得分:0)
一个简单的解决方案是使记录操作追加而不是覆盖。
use strict;
use warnings;
use autodie;
open my $fh, '>>', 'file.log';
或者,您可以在重新运行之前使用递增器备份旧日志。不能说我对此解决方案感到非常激动。
use strict;
use warnings;
use autodie;
use File::Copy qw(move);
use List::Util qw(max);
my $log = 'file.log';
my $maxid = 1 + max map {/(\d+)$/ ? $1 : 0} <$log.*>;
move($log, "$log.$maxid");
open my $fh, '>', $log;