【问题标题】:Log4j doesn't write logs to fileLog4j 不会将日志写入文件
【发布时间】:2015-11-06 13:51:56
【问题描述】:

我在 log4j 上使用 slf4j。

     <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.12</version>
        </dependency>
     <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.12</version>
     </dependency>

log4j.properties 在 WEB-INF 文件夹中,内容如下:

log4j.rootLogger=DEBUG, stdout, file

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:\\logs\\log4j.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

在具有相同版本 Tomcat 的另一个环境中,相同的存储库工作正常,记录到文件...

【问题讨论】:

  • 看看这个问题对你有用吗:stackoverflow.com/questions/14544991/…
  • 你能发布你的扩展项目结构吗?
  • 您是否尝试将 -Dlog4j.debug 添加到您的 JVM 参数中以让 log4j 打印其启动信息?您的日志语句是否显示在 System.out 中?它们是否遵循您的配置文件中指定的格式?如果您更改配置文件中的格式,System.out 中的语句是否也会更改?如果没有,则 log4j 找不到您的配置文件。
  • 你试过这个简单的helloworldstackoverflow.com/questions/4311026/…

标签: java log4j


【解决方案1】:

您说相同的配置文件在不同的环境中运行良好。您能否详细说明环境之间的差异。例如他们都在Windows上吗?在另一个环境中运行良好的事实表明您的配置很好,但是您的环境存在一些问题。以下是一些需要检查的事项:

  • tomcat 进程是否有权写入该文件 - 即是否需要管理员权限才能写入 D:\logs\log4j.log?

  • 确保在 tomcat 的目录周围没有任何临时文件,这可能会阻止您的更改生效。可以肯定的是,停止tomcat,从%CATALINA_HOME%\webapps 中删除扩展的war,删除%CATALINA_HOME%\temp 和%CATALINA_HOME%\work 的内容

  • 检查您的类路径中是否没有任何其他 log4j 配置文件,因为这些文件可能会覆盖您的 log4j 文件并阻止它生效。要仔细检查这一点,您可以尝试暂时删除 log4j.properties 文件,以查看是否收到消息说日志系统未正确初始化。

【讨论】:

    【解决方案2】:

    也许您的 log4j.properties 根本没有被读取。如果找不到,那么 log4j 将使用默认配置,您甚至可能不知道它。 尝试通过这一行

    -Dlog4j.configuration=file:///D:/yourPathToFile/log4j.properties

    作为运行配置中的 VM 参数,看看是否有帮助。

    【讨论】:

    • +1 这解决了我的问题,似乎是该问题的最佳答案(也许不是“最干净”的解决方案,但它确实有效)。
    【解决方案3】:

    对于基于 Maven 的项目,将 log4j.properties 保存在 src/main/resources 中

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,将 log4j.log 放在源代码中。我以为它会在 EAR 文件中编译,但事实并非如此。假设它使用默认值。

      【讨论】:

        【解决方案5】:

        代替:

        log4j.appender.mainAppender.File=mainloggs.log

        log4j.appender.mainAppender.Append=true

        使用:

        log4j.appender.file.File=mainloggs.log
        
        log4j.appender.file.Append=true
        

        【讨论】:

          【解决方案6】:

          您的log4j.properties 文件应位于WEB-INF/classes,而不是WEB-INFWEB-INF 不在 Web 应用程序类路径中,但 WEB-INF/classes 在。

          【讨论】:

            【解决方案7】:

            试试

             log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
             log4j.appender.file.Append=true
            

            如果它不起作用。请把你的 web.xml

            【讨论】:

              【解决方案8】:

              当您不在类路径中添加 log4j.properties 文件时,可能会出现问题。要修复相同的问题,请按照以下步骤操作:-

              1. 在项目中创建一个文件夹资源,并将您的 log4j.properties 放入其中。
              2. 转到项目属性--> Java 构建路径-->单击添加文件夹-->检查资源文件夹-->单击确定并完成。它应该可以解决您的问题。

              【讨论】:

                【解决方案9】:

                我遇到了同样的问题。它曾经工作过一段时间,但现在不工作。 我想这不是 log4j2 或 slf4j 的问题(就像我的情况一样),而是配置文件的相对路径。

                如果您更新了 java 或更新了 IDE 或更改了某些系统变量或文件夹的相对路径,那么您的问题与我的类似。

                可能的修复/解决方法 -

                • 尝试在工件中包含 log4j2 配置文件,同时 构建它。
                • 或者,您可以从属性文件和硬编码中获取配置 登录代码本身 - 这对我有用。

                【讨论】:

                  【解决方案10】:

                  在 Windows 上提及文件路径时尝试使用该方案。不需要在其他平台上以这种方式提及它,但在您需要的 Windows 上。我观察到有关没有方案的文件路径的问题。

                  log4j.appender.file.File=file://d:/logs/log4j.log
                  

                  【讨论】:

                    【解决方案11】:

                    因此,在 tomcat 上编写 Web 应用程序时,我遇到了类似的问题,即未写入 .log 文件。最后,我将文件路径更改为与 .\log.log 之类的相对路径。然后我注意到,当我使用 tomcat 7 运行程序时,我在 \bin 目录中找到了日志文件,而不是在我的 tomcat 安装中的 \log 目录中。

                    【讨论】:

                      【解决方案12】:
                      log4j.appender.file.File=${user.home}\\Logs\\mylogfile.log
                      

                      【讨论】:

                        【解决方案13】:

                        我有同样的问题。原来,我在 Tomcat 中有另一个 Web 应用程序,其中包含另一个 log4j.properties 文件。删除此应用程序后,一切正常

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2017-11-09
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多