【问题标题】:log4j:ERROR setFile(null,false) call failedlog4j:ERROR setFile(null,false) 调用失败
【发布时间】:2014-01-15 14:33:03
【问题描述】:

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

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>

ma​​ven.xml(不完整)

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

当我直接使用 &lt;param name="file" value="D:/logs/debug.log"/&gt; 时,它工作正常,但是当我使用 &lt;param name="file" value="${logging.folder}/debug.log"/&gt; 时,我遇到异常..

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

请告诉我出了什么问题?

【问题讨论】:

  • 看起来config.properties 确实没有被读取之前 XML 属性被解释。我还注意到您的路径不匹配,并且您没有指定出现错误的环境(是不是dev 未启用的配置?)。
  • @chrylis profile 'dev' 是默认启用的。所以你能告诉我我的问题的解决方案是什么吗?当我直接使用 时,它对我来说工作正常..
  • user3128668 - 您找到上述问题的答案了吗?

标签: java maven log4j log4net


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

    在定义此路径 ${logging.folder} 的地方使用正斜杠 ('/') 而不是反斜杠 ('\')。这就是我在上面看到的错误:

    你在这里使用反斜杠:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      如果您使用的是 Tomcat,那么希望它会起作用。

      【讨论】:

        【解决方案4】:

        这个问题与砍人无关。 这行错误:

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

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-15
          相关资源
          最近更新 更多