当我尝试使用log4j写入文件时,为什么会出现FileNotFoundException?

5

我是一个完全没有使用过 log4j 的新手,我遇到了以下问题。

我想将日志输出到名为 log.out 的文件中。

因此,我创建了以下 log4j.properties 配置文件:

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

问题在于,当我执行我的应用程序并且它发生了日志记录操作时,会出现以下类似的情况:

logger.debug("INTO main()");

我在控制台中发现以下异常(与log.out文件相关的错误信息为access denied(意为访问被拒绝)):

log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: \log.out (Accesso negato)
        at java.io.FileOutputStream.open(Native Method)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at java.io.FileOutputStream.<init>(Unknown Source)
        at org.apache.log4j.FileAppender.setFile(FileAppender.java:289)
        at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:163)
        at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:2
56)
        at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.j
ava:132)
        at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.j
ava:96)
        at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigura
tor.java:654)

不要向我手动创建的log.out文件中写入任何内容。这个log.out文件与我的应用程序执行的jar文件处于同一级别。
为什么?我错过了什么?如何解决这个问题?
谢谢。

log4j.appender.FILE.File=${log}/log.out 是 ${log} 变量设置了吗? - learningJava
没有,我认为这会自动引用我的应用程序的位置。有没有一种方法告诉log4j文件已经创建在包含执行jar的文件夹中? - AndreaNobili
只需在log4属性文件中硬编码一些文件夹位置,您知道用户可以访问该位置。或者只需编写 log4j.appender.FILE.File=log.out,该文件将在用户默认目录中创建。 - learningJava
教程来源:http://www.tutorialspoint.com/log4j/log4j_sample_program.htm - LoveMeow
2个回答

6
我认为$log为空,它试图在根目录下创建文件,并且您正在以普通用户身份运行程序。请检查一下。

在什么根目录下?我希望日志文件与执行的jar(我的应用程序)在同一级别创建。 - AndreaNobili
1
你能试着只使用这个吗? log4j.appender.FILE.File=log.out这应该可以解决权限相关的问题。 - Satya Nand kanodia
现在你也可能想要检查一下你的 $log 变量。看起来它是空的。 - Satya Nand kanodia

5

使用属性文件进行日志记录时,以下配置应该有效。对于Tomcat应用服务器,请使用${catalina.base}获取Tomcat基目录。

log4j.appender.FILE.File=${catalina.base}/logs/debug.log

对于XML配置,语法可能如下所示:
<param name="file" value="${catalina.base}/logs/debug.log"/>

如果您使用Tomcat作为应用服务器,希望它可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接