Как я могу ежемесячно вращать файлы журналов, используя Perl? - PullRequest
2 голосов
/ 14 января 2009

В Unix мне нужно иметь возможность архивировать файлы журналов в ежемесячные папки, помеченные соответствующим образом. Как мне это сделать в Perl?

Ответы [ 3 ]

5 голосов
/ 14 января 2009

Должен ли это быть Perl? Вы пробовали войти в систему?

Что касается решения Perl: mkdir создаст каталоги, и если вы используете POSIX 'strftime'; , то вы сможете генерировать хорошие имена каталогов на основе в текущее время (т. е. my $ dirname = strftime ('% Y-% m-% d', localtime ()) создаст строку YYYY-MM-DD), и вы можете переместить файлы, использующие переименовать . Это просто ядро ​​Perl, есть тонна CPAN-модулей, которые делают это частично или полностью (например, File :: Copy вместо переименования).

2 голосов
/ 15 января 2009

Давайте приведем реальную идею 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'

Примечания

  1. Установите Smart::Comments или закомментируйте его.
  2. Константа $BASE_LOG_DIRECTORY записана в стиле Readonly / PBP
  3. Все остальное должно идти с Perl.
2 голосов
/ 14 января 2009

Когда я выполнил эту задачу, я использую cronolog .

В пакет входит сценарий Perl cronosplit, который можно использовать для разделения существующего монолитного файла журнала на подкаталоги %Y/%m/%d.

Cronolog сам по себе является двоичным файлом, написанным на C, который может использоваться в качестве целевого объекта для ведения журнала. Например, вы можете использовать его в Apache httpd.conf:

CustomLog "|/usr/sbin/cronolog /web/logs/%Y/%m/%d/access.log"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...