2

我使用tomcat 5.5.33附带的procrun版本安装了一个java批处理:

   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声称使路径相对于该user.dir位置的 File 类。

我已经解决了这个问题,但我很好奇:有没有其他人遇到过这种行为?如果是这样,到底发生了什么?

4

3 回答 3

0

PhilW 的评论指出了原始问题的正确答案。也就是说,Oracle/Sun在通过命令行设置时声明了一个问题http://bugs.sun.com/view_bug.do?bug_id=4117557 。user.dir这就是为什么在写出日志文件时无法正确理解相对路径的原因。

通过使用 Phil、Amir 和我都建议的绝对路径(即使前缀为${user.dir}-- 那时可以信任 -- 即使 JVM 在内部得到错误的值),您可以完全避免这个问题。

于 2012-03-13T18:41:24.810 回答
0

我用过${user.dir}lo4j.properties它已经奏效了。你有没有尝试过?

log4j.appender.InfoLogFile.File=${user.dir}/logs/info.log
于 2011-08-26T12:18:17.317 回答
0

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

于 2011-08-26T12:20:23.507 回答