如何使用Perl每月轮换日志文件?

如何使用Perl每月轮换日志文件?,perl,unix,logging,rotation,Perl,Unix,Logging,Rotation,在Unix中,我需要能够将日志文件归档到每月的文件夹中,并相应地进行标记。如何在Perl中执行此操作?完成此任务后,我使用 该包包括一个名为cronosplit的Perl脚本,您可以使用该脚本将现有的单片日志文件拆分为%Y/%m/%d子目录 Cronolog本身是用C编写的二进制文件,可以用作日志记录的管道目标。例如,您可以在Apache httpd.conf中使用它: CustomLog "|/usr/sbin/cronolog /web/logs/%Y/%m/%d/access.log"

在Unix中,我需要能够将日志文件归档到每月的文件夹中,并相应地进行标记。如何在Perl中执行此操作?

完成此任务后,我使用

该包包括一个名为
cronosplit
的Perl脚本,您可以使用该脚本将现有的单片日志文件拆分为
%Y/%m/%d
子目录

Cronolog本身是用C编写的二进制文件,可以用作日志记录的管道目标。例如,您可以在Apache httpd.conf中使用它:

CustomLog "|/usr/sbin/cronolog /web/logs/%Y/%m/%d/access.log"

它必须是Perl吗?你试过了吗


就Perl解决方案而言:mkdir将创建目录,如果使用POSIX'strftime',则您将能够基于当前时间生成漂亮的目录名(即,my$dirname=strftime(“%Y-%m-%d',localtime())将生成YYYY-MM-DD字符串),并且您可以使用重命名移动文件。这只是核心Perl,有大量的CPAN模块可以完成部分或全部任务(例如File::Copy,而不是重命名)。

让我们提供一个实际的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
注释

  • 安装
    Smart::Comments
    ,或将其注释掉
  • 常量
    $BASE\u LOG\u目录
    以只读/PBP样式编写
  • 其他一切都应该随Perl一起提供

  • 你可能想用谷歌搜索一下这个,或者提供更多关于你具体需求的信息。这项工作已经完成,并在许多地方得到记录。你能再具体一点吗?
    ### $directory: '/my/base/directory/2009-January'
    ### $log_file_path: '/my/base/directory/2009-January/system.log'