Log4j不会将日志写入文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Log4j不会将日志写入文件相关的知识,希望对你有一定的参考价值。

我在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的另一个环境中,相同的存储库工作正常,记录到该文件...

答案

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

  • tomcat进程是否有权写入该文件 - 即是否需要写入D: logs log4j.log的管理员权限?
  • 确保tomcat目录周围没有任何临时文件可能会阻止您的更改生效。可以肯定的是,停止tomcat,从%CATALINA_HOME% webapps中删除扩展的war,删除%CATALINA_HOME% temp和%CATALINA_HOME% work的内容
  • 检查您的类路径上没有任何其他log4j配置文件,因为这些文件可能会覆盖您的log4j文件并阻止它生效。要仔细检查这一点,您可以尝试暂时删除log4j.properties文件,看看是否收到消息说日志系统未正确初始化。
另一答案

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

log4j.appender.file.File=file://d:/logs/log4j.log
另一答案

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

另一答案
log4j.appender.file.File=${user.home}\Logs\mylogfile.log
另一答案

我遇到过同样的问题。事实证明,我在Tomcat中有另一个包含另一个log4j.properties文件的Web应用程序。删除此应用程序后,事情正在按预期工作

另一答案

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

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

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

另一答案

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

另一答案

代替:

log4j.appender.mainAppender.File = mainloggs.log

log4j.appender.mainAppender.Append =真

使用:

log4j.appender.file.File=mainloggs.log

log4j.appender.file.Append=true
另一答案

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

另一答案

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

另一答案

试试吧

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

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

另一答案

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

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

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

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

可能的修复/解决方法 -

  • 在构建工件时尝试在工件中包含log4j2配置文件。
  • 或者,您可以从属性文件获取配置并对代码本身的日志记录进行硬编码 - 这对我有用。

以上是关于Log4j不会将日志写入文件的主要内容,如果未能解决你的问题,请参考以下文章

Log4j写入数据库详解

混合 log4j 1.x 和 log4j 2

用log4j将日志写入数据库

使用 log4j 将日志数据写入 syslog

如何在spring boot中配置log4j写入文件?

无法阻止 Hibernate 将日志写入控制台(log4j.properties 可以)