[英]Log4j doesn't write logs to file
我在 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 文件,以查看是否收到消息说日志系统未正确初始化。
也许您的 log4j.properties 根本没有被读取。 如果没有找到,那么 log4j 将使用默认配置,您甚至可能都不知道它。 尝试通过这条线
-Dlog4j.configuration=file:///D:/yourPathToFile/log4j.properties
作为运行配置中的 VM 参数,看看它是否有帮助。
对于基于 Maven 的项目,将 log4j.properties 保存在 src/main/resources
我有同样的问题,将 log4j.log 放在源代码中。 我以为它在 EAR 文件中被编译,但不是。 假设它使用默认值。
代替:
log4j.appender.mainAppender.File=mainloggs.log
log4j.appender.mainAppender.Append=true
利用:
log4j.appender.file.File=mainloggs.log
log4j.appender.file.Append=true
当您不在类路径中添加 log4j.properties 文件时,可能会出现问题。 要解决此问题,请按照以下步骤操作:-
您的log4j.properties
文件应该在WEB-INF/classes
中,而不是WEB-INF
中。 WEB-INF
不在 Web 应用程序类路径中,但WEB-INF/classes
是。
尝试
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.Append=true
如果它不起作用。 请把你的 web.xml
我有同样的问题。 它曾经工作过一段时间,但现在不工作。 我想这不是 log4j2 或 slf4j 的问题(就像我的情况一样),而是配置文件的相对路径。
如果您更新了 java 或更新 IDE 或更改了某些系统变量或文件夹的相对路径,那么您的问题与我的类似。
可能的修复/解决方法 -
在 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 中有另一个 Web 应用程序,其中包含另一个 log4j.properties 文件。 删除此应用程序后,一切正常
通过 Log4j 1.x 桥 (log4j-1.2-api) 将 log4j1 迁移到 log4j2 时我遇到了这个问题
我的 logj1 配置正确,并且 log4j2 和桥 JAR 已正确放置,但我忘记了这一步。 所以添加这个 JVM 参数起作用了:
-Dlog4j1.compatibility=true
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.