Unix では、ログ ファイルを月ごとのフォルダにアーカイブし、それに応じてラベルを付ける必要があります。Perlでこれを行うにはどうすればよいですか?
2516 次
3 に答える
5
それはPerlである必要がありますか?logrotateを試しましたか?
Perl ソリューションに関する限り: mkdirはディレクトリを作成します。POSIX 'strftime' を使用する場合は、、その後、現在の時刻に基づいて適切なディレクトリ名を生成できます (つまり、my $dirname = strftime('%Y-%m-%d',localtime())は YYYY-MM-DD 文字列を生成します) )、 renameを使用してファイルを移動できます。これは単なるコア Perl です。これの一部またはすべてを行う CPAN モジュールがたくさんあります (名前の変更の代わりに File::Copy など)。
于 2009-01-14T19:06:19.023 に答える
2
それが求められていたので、実際の Perl のアイデアを提供しましょう:
use File::Path qw<mkpath>;
use File::Spec;
use POSIX qw<strftime>;
use Smart::Comments;
my $directory
= File::Spec->catfile( $BASE_LOG_DIRECTORY
, strftime( "%Y-%B", localtime ) #2009-January
);
### $directory
unless ( -e $directory ) {
mkpath( $directory, { verbose => 1 } );
}
my $log_file_path = File::Spec->catfile( $directory, 'system.log' );
### $log_file_path
出力は
### $directory: '/my/base/directory/2009-January'
### $log_file_path: '/my/base/directory/2009-January/system.log'
ノート
- をインストール
Smart::Comments
するか、コメントアウトします。 - 定数
$BASE_LOG_DIRECTORY
は Readonly/PBP スタイルで記述されています - それ以外はすべて Perl に付属している必要があります。
于 2009-01-14T23:14:18.057 に答える
2
このタスクが完了したら、 cronologを使用します。
パッケージにはcronosplit
、既存のモノリシック ログ ファイルをサブディレクトリに分割するために使用できるPerl スクリプトが含まれています%Y/%m/%d
。
Cronolog 自体は C で記述されたバイナリであり、ログのパイプ ターゲットとして使用できます。たとえば、Apache httpd.conf で使用できます。
CustomLog "|/usr/sbin/cronolog /web/logs/%Y/%m/%d/access.log"
于 2009-01-14T19:04:40.587 に答える