Log-Dateien des print2forms Servers

Anforderung

Der print2forms-Server schreibt neben seinem eigentlichen Log, in dem die Kommunikation mit den print2forms-Clients, -Gateways, -Routern, -Proxies und dem Administrationsprogramm protokolliert wird, noch zwei weitere Log-Dateien. In der einen - Name beginnt mit access - werden die Zugriffe auf die print2forms-Objekte registriert, in der anderen - Name beginnt mit statistic - wird auch registriert, welches Objekt auf wievielen Seiten eines Druckauftrags verwendet wurde.

Wird bei der Konfiguration des print2forms-Servers ein monatliches Protokoll angefordert, können die beiden Log-Dateien für die Zugriffe und die Statistik auf beachtliche Ausmasse im Bereich von mehreren Gigabyte anwachsen.

Wenn im print2forms-System keine Statistikdaten ausgewertet werden, sind die beiden Log-Dateien nur Balast, der bei längerem Betrieb die Festplatte des Rechners füllen kann, wenn die Log-Dateien nicht aktiv verwaltet werden (z.B. durch Aufruf von Skripten beim Wechsel der Log-Dateien).

Aus diesem Grund werden die Log-Dateien für die Zugriffe und die Statistik ab dem print2forms-Server Build 821 ebenfalls einer Grössenbeschränkung unterworfen.

Realisierung

Die maximale Grösse der eigentlichen Log-Dateien des print2forms-Servers - Name beginnt mit p2fServer - kann im Kontrollfeld des Servers eingestellt werden. Erreicht die Log-Datei diese Grösse, wird sie geschlossen, ihr Name erhält das Suffix .old und es wird eine neue Log-Datei geöffnet. Eine eventuell bereits vorhandene Log-Datei mit dem Suffix .old wird dabei überschrieben.

Mit dem neuen Build des print2forms-Servers werden die Log-Dateien für die Zugriffe und die Statistik ganz analog behandelt. Es gelten dieselben Grössenbeschränkungen wie für die eigentliche Log-Datei. Insofern ist keine neue Konfiguration notwendig.

Da mit dem Überschreiben einer alten Log-Datei aber Daten unweigerlich verloren gehen, bekommt der Aufruf eines Skriptes beim Wechsel der Log-Datei eine existentielle Bedeutung, wenn die Zugriffs- oder Statistikdaten für Auswertungen benötigt werden.

Auf der Registerkarte Protokolleinstellungen befindet sich im unteren Teil ein Eingabefeld mit dem Titel Protokollkommando. In diesem Feld kann ein Programm oder ein Skript angegeben werden, welches aufgerufen werden soll, sobald eine Log-Datei geöffnet oder geschlossen wird.



Der Aufruf des Programms oder Skripts wird dabei um den Namen der betreffenden Log-Datei und um den Grund für den Aufruf ergänzt. Komplette Aufrufe sähen dann etwa wie folgt aus:

C:/Perl/bin/perl.exe "E:/Logs/Log.pl" "E:\Logs\p2fServer-2014w09.log" CREATE
C:/Perl/bin/perl.exe "E:/Logs/Log.pl" "E:\Logs\statistic-2014w09.csv" OPEN 
C:/Perl/bin/perl.exe "E:/Logs/Log.pl" "E:\Logs\access.2014w09.log" CLOSE SIZE

Wie zu sehen ist, wird der Grund für den Aufruf des Programms oder Skripts in Form von vier Schlüsselworten mitgeteilt, deren Bedeutung der nachfolgenden Tabelle entnommen werden kann.

CREATE Die zuvor angegebene Log-Datei wurde neu angelegt.
OPEN Die zuvor angegebene Log-Datei wurde zum Schreiben geöffnet.
CLOSE SIZE Die zuvor angegebene Log-Datei wurde wegen Erreichens der Grössenbeschränkung geschlossen und umbenannt, indem das Suffix .old angehängt wurde.

Hier ein Beispiel für ein Skript, welches verhindert, dass die alten Log-Datein überschrieben werden, indem es beim Schliessen der Log-Datei diese 'sichert', indem es ein Suffix mit einem Timestamp anhängt. Die Aufrufe des Skripts werden dabei in einer eigenen kleinen Log-Datei protokolliert. Hierbei ist zu beachten, dass beim Aufruf des Skriptes mit CLOSE und SIZE die Log-Datei bereits umbenannt worden ist (mit dem Suffix .old).

use Time::HiRes qw(gettimeofday);
use strict;
 
# Folgende Zeile im Kontrollfeld p2fServer auf der Seite Protokolleinstellungen
# im Eingabefeld Protokollkommando einfügen (Auf eigene Verhältnisse anpassen!)
# "C:/Perl/bin/perl.exe" "E:/Logs/Log.pl"
 
# my own logfile
my $Log ="e:/Logs/logcmd.log";
open(LOG, '>>', $Log);
 
# get time for timestamp
my ($S, $M, $H, $d, $m, $y) = localtime(time);
 
if($ARGV[1] eq "CLOSE" and $ARGV[2] eq "SIZE")
  {    
    # get seconds and microseconds since the epoch
    my ($sec, $usec) = gettimeofday();
    my $Name = sprintf "%s-%d%06d", $ARGV[0], $sec, $usec;
 
    rename $ARGV[0],$Name;
    printf LOG "%04d-%02d-%02d %02d:%02d:%02d %s %s %s: %s\n", $y+1900,$m+1,$d,$H,$M,$S, $ARGV[0], $ARGV[1], $ARGV[2], $Name ;
  }
else
  {
    printf LOG "%04d-%02d-%02d %02d:%02d:%02d %s %s %s\n", $y+1900,$m+1,$d,$H,$M,$S, $ARGV[0], $ARGV[1], $ARGV[2];
  }
 
close LOG;
 
exit 0;



Als Beispiel für die Reihenfolge von Aufrufen dieses Skriptes in einem echten Umfeld, hier ein Auszug aus der Log-Datei des Skriptes. Nur bei den Aufrufen mit CLOSE und SIZE tritt das Skript wirklich in Aktion.

2014-03-04 11:57:02 E:\Logs\p2fServer-2014w09.log CREATE 
2014-03-04 11:57:49 E:\Logs\access.2014w09.log CREATE 
2014-03-04 11:58:20 E:\Logs\statistic-2014w09.csv CREATE 
2014-03-04 11:58:46 E:\Logs\statistic-2014w09.csv.old CLOSE SIZE: E:\Logs\statistic-2014w09.csv.old-1393930726497194
2014-03-04 11:59:09 E:\Logs\access.2014w09.log.old CLOSE SIZE: E:\Logs\access.2014w09.log.old-1393930749413634
2014-03-04 11:59:09 E:\Logs\p2fServer-2014w09.log.old CLOSE SIZE: E:\Logs\p2fServer-2014w09.log.old-1393930749725634
2014-03-04 11:59:36 E:\Logs\access.2014w09.log.old CLOSE SIZE: E:\Logs\access.2014w09.log.old-1393930776887283
2014-03-04 12:00:54 E:\Logs\p2fServer-2014w09.log OPEN 
2014-03-04 12:01:07 E:\Logs\statistic-2014w09.csv OPEN 
2014-03-04 12:01:24 E:\Logs\statistic-2014w09.csv.old CLOSE SIZE: E:\Logs\statistic-2014w09.csv.old-1393930884125072
2014-03-04 12:02:00 E:\Logs\access.2014w09.log OPEN 
2014-03-04 12:02:01 E:\Logs\p2fServer-2014w09.log.old CLOSE SIZE: E:\Logs\p2fServer-2014w09.log.old-1393930921077938


Hinweise