Comment puis-je effectuer une rotation mensuelle des fichiers journaux à l'aide de Perl?

StackOverflow https://stackoverflow.com/questions/444208

  •  22-07-2019
  •  | 
  •  

Question

Sous Unix, je dois pouvoir archiver les fichiers journaux dans des dossiers mensuels, étiquetés en conséquence. Comment faire cela en Perl?

Était-ce utile?

La solution

Donnons une idée réelle de Perl, puisque c’est ce qui a été demandé:

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

La sortie est

### $directory: '/my/base/directory/2009-January'
### $log_file_path: '/my/base/directory/2009-January/system.log'

Notes

  1. Installez Smart :: Comments ou commentez-le.
  2. La constante $ BASE_LOG_DIRECTORY est écrite en style Readonly / PBP
  3. Tout le reste devrait juste venir avec Perl.

Autres conseils

Faut-il que ce soit en Perl? Avez-vous essayé logrotate?

En ce qui concerne une solution Perl: mkdir créera les répertoires. Si vous utilisez POSIX 'strftime'; , vous pourrez alors générer un répertoire agréable. des noms basés sur l’heure actuelle ( mon $ dirname = strftime ('% Y-% m-% d', heure locale ()) générera une chaîne AAAA-MM-JJ), et vous pouvez déplacer les fichiers à l'aide de renommer . C’est juste le noyau Perl, il y a une tonne de modules CPAN qui font tout ou partie de cela (comme File :: Copy, au lieu de renommer).

Lorsque j'ai eu cette tâche, j'utilise cronolog .

Le package inclut un script Perl appelé cronosplit , que vous pouvez utiliser pour fractionner un fichier journal monolithique existant en sous-répertoires % Y /% m /% d .

Cronolog lui-même est un binaire écrit en C qui peut être utilisé comme cible canalisée pour la journalisation. Par exemple, vous pouvez l’utiliser dans Apache httpd.conf:

CustomLog "|/usr/sbin/cronolog /web/logs/%Y/%m/%d/access.log"
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top