Как интерпретировать системное свойство user.dir в commons-daemon procrun & log4j? - PullRequest
2 голосов
/ 26 августа 2011

Я установил пакетный процесс Java с использованием версии procrun, поставляемой с tomcat 5.5.33:

   Commons Daemon Service Runner version 1.0.5.0/Win32 (Jan  5 2011) 
   Copyright (c) 2000-2011 The Apache Software Foundation.

В установке я указываю (среди других опций JVM):

  --JvmOptions="-Duser.dir=C:\LOCAL\serverapps"

Моя конфигурация log4j.properties включает в себя:

   log4j.appender.InfoLogFile.File=../logs/info.log

Однако файл info.log записывается в:

   C:\WINDOWS\logs

Я проверил значение user.dir во многих разных точках, и оно всегда C:\LOCAL\serverapps.

Но, log4j ведет себя так, как если бы user.dir=C:\Windows\System32 (или какой-то другой subir C:\Windows).

Из того, что я могу сказать из источника log4j (1.2.16), FileAppender имеет дело только с классами java.io.FileOutputStream и File, которые утверждают, что делают пути относительно местоположения user.dir.

Я работал над этой проблемой, но мне любопытно: кто-нибудь еще сталкивался с таким типом поведения? Если так, что на самом деле происходит?

Ответы [ 3 ]

0 голосов
/ 26 августа 2011

FileAppender, когда ему дан относительный путь, создает файл с текущим рабочим каталогом, а не с домашним каталогом пользователя.

Вам необходимо передать $ {user.dir} в имени файла.

SRC: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/FileAppender.java?view=markup

РЕДАКТИРОВАТЬ: см. Комментарий ниже для исправления - user.dir! = User.home

http://bugs.sun.com/view_bug.do?bug_id=4117557

0 голосов
/ 13 марта 2012

Комментарий PhilW указывает на правильный ответ на оригинальный вопрос. То есть Oracle / Sun объявляет о проблеме http://bugs.sun.com/view_bug.do?bug_id=4117557, когда user.dir устанавливается через командную строку. По этой причине относительный путь неправильно понимается при записи файлов журналов.

Используя абсолютный путь (даже с префиксом ${user.dir} - которому можно доверять на этом этапе - даже если JVM внутренне неправильно понимает значение), как все говорят Фил, Амир и я, вы вообще избежите проблемы .

0 голосов
/ 26 августа 2011

Я использовал ${user.dir} в lo4j.properties, и это сработало.Ты пытался?

log4j.appender.InfoLogFile.File=${user.dir}/logs/info.log
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...