java - 如何配置 log4j 和 logback 以正确登录到一个文件?

标签 java maven log4j slf4j logback

我有一个 java 网络应用程序,它使用带有 slf4j 的 logback 进行日志记录。 这个项目有一个依赖jar(这是一个子项目)。这个依赖 jar 使用 org.apache.log4j.Logger 进行日志记录。 所有日志必须进入一个日志文件。 我的问题是,无论我用 jar 文件中的代码记录什么,都不会写入日志文件。 最初我有 logback.xml。为了解决上述问题,我将 log4j.properties 文件添加到我的网络应用程序中。 它解决了我的问题,现在我可以在一个文件中查看所有日志。

我的新问题是:早些时候日志文件根据 logback.xml 中的滚动策略每天滚动。 现在它不滚动了。即使我在 log4j.properties 中配置了与 logback.xml 中的滚动策略相匹配的滚动策略,滚动也没有发生。

我不想用 logback 替换依赖项中的 log4j。而且我还想将所有日志写入一个文件。 这可能吗,我该如何解决我的问题?

仅供引用:我的 pom.xml 中包含“log4j-over-slf4j”依赖项

Log4j.properties:

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=SOME_PATH/logs/studentApp.log
log4j.appender.file.rollingPolicy = org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.rollingPolicy.FileNamePattern = SOME_PATH/logs/studentApp.%d{yyyy-MM-dd}.log    
log4j.appender.file.maxBackupIndex=14
log4j.appender.file.threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%-5p] %d %c - %m%n
log4j.rootLogger=DEBUG,file

最佳答案

假设您的滚动策略是正确的,log4j 可能会选择错误的配置。 log4j 查找类路径中的第一个配置文件(第一个 .xml 然后是 .properties),如果它恰好是来自您的一个依赖项的配置,您的滚动策略将不会工作。

要对此进行测试,您可以将系统属性 -Dlog4j.configuration=... 添加到 tomcat 启动脚本的配置路径。或者简单地将您的日志级别设置为 TRACE/DEBUG 并查看它是否影响输出。

编辑:您的 log4j 配置看起来不错,但缺少日期模式。 尝试添加 log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH-mm(请注意,我已将模式设置为每分钟滚动一次,以便于测试)

编辑:您可以删除包含 rollingPolicymaxBackupIndex 的每一行 - 在这种情况下不会选取这些内容

关于java - 如何配置 log4j 和 logback 以正确登录到一个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36043681/

相关文章:

java- log4j- 找不到获取类

java - 调用父类(super class)构造函数和方法时的异常处理

tomcat - log4j 与 Tomcat6

java - 如何从 IntelliJ IDEA 启动 Vert.x 服务器?

java - NoSuchMethodException : getProperties on jar execution

eclipse - 为 Eclipse 中的所有项目添加 Maven 存储库

maven - 将 Maven Artifact 名称保留在 maven-install-plugin 上(默认安装)

java - 从 log4j 或 logback 中调用实例继承附加程序

java - ThreadPoolExecutor.shutdownNow() 没有在 Thread 中抛出 InterruptedException

java - Apache Ace 可以用作 Maven 存储库吗?