2009-07-13 5 views
0

J'ai un RollingFileAppender log4j configuré comme celui-ci

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

mon problème est que java.io.tmpdir est mis en correspondance avec C : \ Temp et log4j n'échappent pas à la barre oblique inverse. Quand je commence le processus, je vois l'erreur suivante

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 

il est impossible pour moi de modifier les variables d'environnement sur toutes les machines mes utilisateurs et je ne veux pas coder en dur le chemin du journal.

Je pourrais écrire ma propre extension à RollingFileAppender pour résoudre ce problème, mais j'espérais qu'il y aurait un moyen préexistant.

Quelles sont mes meilleures options?

Répondre

1

Il semblerait que cela ne se produise pas si vous utilisez un fichier de propriétés au lieu d'un fichier XML. En regardant le code source log4j, il semble que DOMConfigurator effectue la substitution TAB qui provoque l'erreur. PropertyConfigurator n'effectue pas cette substitution. Donnez-lui un coup de feu peut-être?

Vous pouvez également remplacer java.io.tmpdir par C:/Temp et utiliser/au lieu de \ le cas échéant. Cela ne semble pas une option pour vous si?

+0

Je suis réticent à compliquer la configuration de mon fichier de configuration. Il semble qu'une extension personnalisée de RollingFileAppender soit la meilleure solution. –

2

Avez-vous essayé?

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

Vous ne devriez pas besoin d'échapper antislashs dans le fichier XML, et log4j doit être parfaitement capable de transformer cette voie en tout chemin spécifique à la plateforme (antislashs sous Windows) dont vous avez besoin.

+0

Java gère la conversion de/to \ parfaitement bien, donc je trouve qu'il vaut mieux toujours utiliser/donc vous n'avez pas à vous soucier de l'échapper. – Herms

+0

Oh, attends, ça n'aiderait pas. Le problème est le "C: \" dans la définition de la variable d'environnement, pas le/avant le nom du fichier. – Herms

+0

Je ne pense pas que cela devrait être important. log4j échappe à des choses comme $ {catalina.home} /logs/app.log bien pour moi sur une machine Windows, dans laquelle catalina.home commence par "C: \" –

Questions connexes