Как я могу сделать log4j fileAppender правильно экранировать содержимое $ {java.io.tmpdir} - PullRequest
0 голосов
/ 13 июля 2009

У меня log4j RollingFileAppender, настроенный так

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

Моя проблема в том, что java.io.tmpdir сопоставлен с C: \ Temp, а log4j не экранирует обратную косую черту. Когда я запускаю процесс, я вижу следующую ошибку

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

я не могу изменять переменные среды на компьютерах всех моих пользователей, и я не хочу жестко кодировать путь журнала.

Я мог бы написать свое собственное расширение для RollingFileAppender, чтобы исправить это, но я надеялся, что уже существует способ обойти это.

Какие мои лучшие варианты?

Ответы [ 2 ]

2 голосов
/ 13 июля 2009

Вы пробовали это?

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

Вам не нужно избегать обратной косой черты в XML-файле, и log4j должен быть полностью способен преобразовать этот путь в любой путь для конкретной платформы (обратная косая черта в Windows), который вам нужен.

1 голос
/ 13 июля 2009

Похоже, что это может не произойти, если вы используете файл свойств вместо файла XML. Глядя на исходный код log4j, видно, что DOMConfigurator выполняет замену TAB, которая вызывает ошибку. PropertyConfigurator не выполняет эту замену. Дай ему шанс?

Вы также можете изменить java.io.tmpdir на C: / Temp и использовать / вместо \ там, где это необходимо. Это не похоже на вариант для вас, хотя?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...