Namensgebung der Dateien von FileHandler

  • Themenstarter Themenstarter Gast2
  • Beginndatum Beginndatum
G

Gast2

Gast
Hallo folgendes Problem:

Ich habe in meiner Software ein Loggingsystem, welches unter anderem den FileHandler verwendet. Dieser ist so konfiguriert, dass er rotierend 10 Logfiles ins APPDATA des Systems schreibt:

Java:
logger = Logger.getLogger(getClass().getName());
        try {
            logfileHandler = new FileHandler(logfilePath + LOGFILE, MAX_LOGFILE_SIZE, 10);
            final SimpleFormatter formatter = new SimpleFormatter();
            logfileHandler.setFormatter(formatter);
            logger.addHandler(logfileHandler);
            logger.setLevel(Level.ALL);
            logger.log(Level.INFO, "logfile created " + TimeString.get());
        } catch (final Exception ex) {
            logger.log(Level.SEVERE, "Cannot create file stream for logging!", ex);
        }

Bei jedem Startup werden aus dem Verzeichnnis alle ungültigen Dateien gelöscht:

Java:
        final File f = new File(logfilePath);
        final File[] fileArray = f.listFiles();
        for (final File file : fileArray) {
            if (!file.getName().startsWith(LOGFILE)) {
                //Files ist eine Utilitiy KLasse von unserer Firma, welche rekursives löschen unterstützt
                Files.delete(file);
            }
        }

Mein Problem ist nun folgendes:
Immer wenn eine zweite (oder xte) Instanz der Applikation erstellt wird, erstell der FileHandler nicht die Logfile mit nächst höheren Nummer sondern eine File:
Code:
LOGFILE_NAME.log.1.0

anstatt:
Code:
LOGFILE_NAME.log.2

Der Grund ist mir auch klar, da die *.log.1 ja noch von der vorgehenden Instanz geöffnet ist. Diese files werden aber natürlich nicht gecleaned, da sie valid sind. Sollen ja auch da bleiben für den Fall das man sie braucht.
Allerdings werden diese nunmal nicht zyklisch überschrieben, da sie ja nur entstehen, wenn mehrere instanzen gleichzeitig aktiv sind. (Was auch so sein soll/kann!).

Kann man das irgendwie unterbinden oder anders konfigurieren?
 
Für jede Instanz der Applikation ein anderes Directory oder mindestens einen anderen Filnamen.

Eine andere Möglichkeit ist es einen einzigen unabhängigen Logger zu starten und alles applikationsinstanzen kommunizieren mit dem
 
Für jede Instanz der Applikation ein anderes Directory oder mindestens einen anderen Filnamen.
Dann müsste ich selber eine Instanzverwaltung machen, was ich eben verhindern wollte, da ich es nur hierfür benötigen würde.

Eine andere Möglichkeit ist es einen einzigen unabhängigen Logger zu starten und alles applikationsinstanzen kommunizieren mit dem
Zu aufwendig.

Notfalls lebe ich damit so wie es ist. Falls aber doch jemand nen Trick kennt, wie man das genannte Verhalten umgehen kann immer ehr damit!
 
Dann müsste ich selber eine Instanzverwaltung machen, was ich eben verhindern wollte, da ich es nur hierfür benötigen würde.

Zu aufwendig.

Notfalls lebe ich damit so wie es ist. Falls aber doch jemand nen Trick kennt, wie man das genannte Verhalten umgehen kann immer ehr damit!
Unterschiedliche Dateinamen sind sicher nicht aufwendig - da könnte die pid verwendet werden oder jede Instanz liest beim start aus einem gemeinsamen File wieviele andere schon laufen und schreibt selbst etwas hinein.

Ich vermute du wirst nicht mit deiner Lösung leben können - du stellst in einem logfile in Problem fest, hast aber keine Ahnung welche Instanz das war - na ja ....

Das ist halt der ganz grosse Nachteil von Frameworks - mein in 2 Stunden gebastelter Logger kann das, braucht keine XML oder was auch immer für Konfigurationen und tut trotzdem ;-) Einarbeit in ein Framework, dass dann noch massiven overhead mit sich bringt, den ich nicht brauche, ist ein Vielfaches davon.
 
Ich benutze den Java Logger kein Framework... Das sind 3 Zeilen Code die man auch noch von Sun bekommt. Wo ist denn das Overhead?!

Und es wäre deutlich mehr Arbeit das mit der Instanzunterscheidung zu machen. Im übrigen steht in der Logfile welcher Fehler wo im Code auftrat. Da ist es sch*** egal in welcher Instanz das passierte.

Mein Problem besteht lediglich im aufräumen des Logfile Verzeichnisses, da nicht deterministische Dateinamen entstehen können... wie eben beschrieben...

Das ist aber durchaus vertretbar, da im Normalfall eh nur eine Instanz ausgeführt werden kann.
 

Neue Themen


Zurück
Oben