繁体   English   中英

Log4j 不会将日志写入文件

[英]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 文件时,可能会出现问题。 要解决此问题,请按照以下步骤操作:-

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

您的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 或更改了某些系统变量或文件夹的相对路径,那么您的问题与我的类似。

可能的修复/解决方法 -

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

在 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM