我使用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
(或C:\Windows
的其他一些subir)。
根据我从log4j源代码(1.2.16)可以看出,FileAppender
只处理声称从java.io.FileOutputStream
位置生成相对路径的user.dir
和File类
我已经解决了这个问题,但我很好奇:还有其他人遇到过这种行为吗?如果是这样,那真的发生了什么?
答案 0 :(得分:0)
我在${user.dir}
中使用了lo4j.properties
并且它已经有效了。你有没有尝试过?
log4j.appender.InfoLogFile.File=${user.dir}/logs/info.log
答案 1 :(得分:0)
FileAppender在给定相对路径时,会创建一个包含当前工作目录的文件 - 而不是用户主目录。
您需要在文件名中传递$ {user.dir}。
编辑:请参阅下面的评论以进行更正 - user.dir!= user.home
答案 2 :(得分:0)
PhilW的评论指出了对原始问题的正确答案。也就是说,当通过命令行设置user.dir
时,Oracle / Sun声明了问题http://bugs.sun.com/view_bug.do?bug_id=4117557。这就是为什么在写出日志文件时没有正确理解相对路径的原因。
通过使用一个绝对路径(甚至前缀为${user.dir}
- 在那一点上可以信任 - 即使JVM在内部得到错误的值),如Phil,Amir和我都建议的那样,你避免使用完全问题。