log4j:ERROR setFile(null,false) 调用失败。

4

我遇到了以下一些奇怪的错误:

log4j:ERROR setFile(null,false) call failed.
java.io.FileNotFoundException: \debug.log (Access is denied)

src/main/dev/environment/dev/config.properties

logging.folder=D:/logs

log4j.xml

<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
      <param name="append" value="false"/>
      <param name="file" value="${logging.folder}/debug.log"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
      </layout>
   </appender>

maven.xml (not complete)

<filters>
            <filter>src/main/environment/dev/config.properties</filter>
        </filters>

当我直接使用<param name="file" value="D:/logs/debug.log"/>时,它可以正常工作,但是当我使用<param name="file" value="${logging.folder}/debug.log"/>时,就会出现上述异常。

我很确定属性文件中的值可以被读取,因为我的其中一个Java文件只能从这个属性文件中读取值。那么为什么这个log4j.xml文件不能读取呢?

请建议我出了什么问题?


看起来 config.properties 文件在 XML 属性被解释之前没有被读取。我还注意到你的路径不匹配,并且你没有指定出现错误的环境(是一个没有启用 dev 的配置吗?)。 - chrylis -cautiouslyoptimistic-
@chrylis的个人资料中,“dev”默认是启用的。你能告诉我解决我的问题的方法吗?当我直接使用<param name="file" value="D:/logs/debug.log"/>时,它对我来说很好用。 - user3128668
user3128668 - 你找到上面的答案了吗? - JavaTec
4个回答

2

除了 Chandra 的回答,我在 Windows 7 上的 Eclipse 中也遇到了相同的异常:

C:/myfile.log                     // access denied...

但是当我创建了一个授予我的用户ID权限的文件夹时,它可以正常工作:

 C:/myLogs/myfile.log             // it wasn't necessary to create the file

我注意到路径必须使用正斜杠指定。

1
在定义路径 ${logging.folder} 时,请使用正斜杠('/')而不是反斜杠('\')。这是我在上面看到的错误:
你在这里使用反斜杠:
java.io.FileNotFoundException: \debug.log (Access is denied)
因此,您的路径应该类似于: logging.folder = D:/logs/

0

这个问题与斜杠无关。

这行错误:

java.io.FileNotFoundException: \debug.log (Access is denied)

告诉我们它正在尝试在根目录下创建 debug.log 文件(\ 代表根目录),显然它没有权限,所以访问被拒绝。

在我的情况下,我通过在启动服务器之前添加 VM 参数来解决了这个问题。就是这样。

示例:(在我的情况下,我使用的是 Wildfly,请将路径更改为您的服务器位置)

"-Dlogging.folder=C:\Program Files\wildfly-14.0.1.Final\standalone\log"


0

我使用属性文件进行日志记录,并为此相同的问题使用以下配置。由于我使用tomcat服务器,因此我使用${catalina.base}来获取tomcat基目录。 log4j.appender.FILE.File=${catalina.base}/logs/debug.log

对于您的xml配置,语法可能如下所示。

<param name="file" value="${catalina.base}/debug.log"/>

如果您正在使用 Tomcat,那么希望它能够正常工作。

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