Frage

In Unix muss ich in der Lage sein, Dateien zu archivieren log in monatlichen Ordner, entsprechend gekennzeichnet. Wie kann ich tun dies in Perl?

War es hilfreich?

Lösung

Lassen Sie uns zur Verfügung stellen eine tatsächliche Perl Idee, denn das ist, was gefragt wurde, für:

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

Die Ausgabe ist

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

Notizen

  1. Installieren Smart::Comments, oder kommentieren Sie sie aus.
  2. Die Konstante $BASE_LOG_DIRECTORY wird in Read-Only / PBP Stil
  3. geschrieben
  4. Alles andere sollte nur kommen mit Perl.

Andere Tipps

Hat es Perl sein? Haben Sie versucht, logrotate?

Was als Perl-Lösung: mkdir werden die Verzeichnisse erstellen, und wenn Sie auf verwenden POSIX 'strftime'; , dann werden Sie in der Lage sein, schön Verzeichnis zu erstellen Namen auf der Grundlage der aktuellen Zeit (dh my $ dirname = strftime ( '% Y-% m-% d', localtime ()) ein YYYY-MM-DD String erzeugen), und Sie bewegen kann die Dateien mit umbenennen . Das ist nur Kern Perl, es gibt eine Tonne von CPAN-Module, die einige oder alle dieser (wie File :: Copy statt Umbenennungs) tun.

Wenn ich diese Aufgabe gehabt haben, verwende ich cronolog .

Das Paket beinhaltet ein Perl-Skript namens cronosplit, die Sie verwenden können eine bestehende monolithische Protokolldatei in %Y/%m/%d Verzeichnisse aufzuteilen.

cronolog selbst ist ein binäre in C geschrieben, die als verrohrt Ziel für die Protokollierung verwendet werden können. Zum Beispiel, können Sie es in einem Apache httpd.conf verwenden können:

CustomLog "|/usr/sbin/cronolog /web/logs/%Y/%m/%d/access.log"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top