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

时间:2014-01-15 14:33:03

标签: java maven log4j log4net

我面临一些奇怪的错误,如下所示

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(未完成)

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

当iam直接使用<param name="file" value="D:/logs/debug.log"/>时,它的工作正常,但是当我使用<param name="file" value="${logging.folder}/debug.log"/> iam获得上述异常时...

我非常确定属性文件中的值能够读取,因为我的一个java文件只能从这个属性文件中读取值..那么为什么这个log4j.xml文件不能读取?

请告诉我出了什么问题?

4 个答案:

答案 0 :(得分:2)

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

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

但是当我创建一个具有我的用户ID权限的文件夹时,它工作正常:

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

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

答案 1 :(得分:1)

使用正斜杠('/')代替反斜杠('\'),无论您在哪里定义此路径$ {logging.folder}。那是我在那里看到的错误:

你在这里使用反斜杠:

java.io.FileNotFoundException:\ debug.log(访问被拒绝)

所以你的路径应该是这样的: logging.folder = D:/ logs /

答案 2 :(得分:0)

对于日志记录,我使用属性文件,我使用以下配置来解决同样的问题。当我使用 tomcat服务器时,我使用${catalina.base}来获取tomcat基目录。 log4j.appender.FILE.File=${catalina.base}/logs/debug.log

对于xml配置,syntex可能类似于以下

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

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

答案 3 :(得分:0)

此问题与削减人无关。 这行错误:

java.io.FileNotFoundException:\ debug.log(访问被拒绝)

告诉我们它正在尝试在根目录中创建debug.log文件(\表示根目录) 显然它将无法访问,因此访问被拒绝。

就我而言,我通过在启动服务器之前添加VM参数来解决此问题。就是这样。

示例:(在我的情况下,我正在使用-Dlogging.folder=C:\Program Files\wildfly-14.0.1.Final\standalone\log,将路径更改为您服务器的位置)

“ {{1}}”