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

And*_*ili 5 java logging log4j filenotfoundexception

我绝对是使用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
Run Code Online (Sandbox Code Playgroud)

问题是,当我执行我的应用程序并在日志操作中发生时,如下所示:

logger.debug("INTO main()");
Run Code Online (Sandbox Code Playgroud)

我在控制台中获得以下异常(与log.out文件相关的错误消息是访问被拒绝(意大利语 Accesso negato):

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)
Run Code Online (Sandbox Code Playgroud)

并且不要在我的log.out文件(我手动创建的)中写入任何内容。此log.out文件与代表我的应用程序的已执行 jar 文件处于同一级别。

为什么?我错过了什么?我该如何解决这个问题?

Tnx

小智 5

我认为 $log 是空的,它试图在 root 上创建一个文件,而您正在以普通用户身份运行程序。给它一张支票。


Md *_*din 5

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

log4j.appender.FILE.File=${catalina.base}/logs/debug.log
Run Code Online (Sandbox Code Playgroud)

对于 XML 配置,语法可能如下所示

<param name="file" value="${catalina.base}/logs/debug.log"/>
Run Code Online (Sandbox Code Playgroud)

如果您使用 Tomcat 作为应用程序服务器,我希望它能够工作。