2009-07-13 3 views
0

ich ein log4j RollingFileAppender wie diese

<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender"> 
    <param name="MaxBackupIndex" value="10" /> 
    <param name="File" value="${java.io.tmpdir}\\myLogFile.log" /> 
</appender> 

mein Problem so konfiguriert haben, dass java.io.tmpdir bis C abgebildet wird : \ Temp und log4j können den Backslash nicht umgehen. Wenn ich den Prozess zu starten sehe ich die folgenden Fehler

java.io.FileNotFoundException: c: emp\myLogFile.log (The filename, directory name, or volume label syntax is incorrect) 
at java.io.FileOutputStream.openAppend(Native Method) 
at java.io.FileOutputStream.<init>(Unk 

es nicht möglich ist, für mich, die Umgebungsvariablen auf all meine Computern der Benutzer zu ändern, und ich will nicht zu hart Code des Protokollpfad.

Ich könnte meine eigene Erweiterung zu RollingFileAppender schreiben, um das zu beheben, aber ich hatte gehofft, dass es einen vorher existierenden Weg darum geben würde.

Was sind meine besten Optionen?

Antwort

1

Es sieht so aus, als ob dies nicht passieren könnte, wenn Sie eine Eigenschaftendatei anstelle einer XML-Datei verwenden. Mit Blick auf den log4j-Quellcode scheint DOMConfigurator die TAB-Ersetzung vorzunehmen, die den Fehler verursacht. PropertyConfigurator führt diese Ersetzung nicht durch. Gib es vielleicht einen Schuss?

Sie können java.io.tmpdir auch in C:/Temp ändern und ggf./anstelle von \ verwenden. Das klingt aber nicht nach einer Option für dich?

+0

Ich zögere, meine Konfigurationsdatei Setup weiter zu komplizieren. Es klingt wie eine benutzerdefinierte Erweiterung für RollingFileAppender ist der beste Weg zu gehen. –

2

Haben Sie das versucht?

<param name="File" value="${java.io.tmpdir}/myLogFile.log" /> 

Sie sollten nicht Schrägstriche in der XML-Datei entkommen müssen, und log4j sollte durchaus in der Lage sein, diesen Weg in das, was plattformspezifischen Pfad Transformation (Schrägstriche unter Windows) Sie benötigen.

+0

Java beherrscht die Umwandlung von/in \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ – Herms

+0

Oh, warte, das würde nicht helfen. Das Problem ist das "C: \" in der env-Variablendefinition, nicht das/vor dem Dateinamen. – Herms

+0

Ich denke nicht, dass das wichtig sein sollte. log4j entzieht sich auf einem Windows-Rechner, wie zB $ {catalina.home} /logs/app.log, in dem catalina.home mit "C: \" beginnt. –

Verwandte Themen