如何配置 log4j 和 logback 以正确登录到一个文件?
How to configure log4j and logback to log into one single file properly?
我有一个 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
(请注意,我已将模式设置为每分钟滚动一次,以便于测试)
编辑:您可以删除包含 rollingPolicy
和 maxBackupIndex
的每一行 - 在这种情况下不会拾取那些
以下配置将为当前日期创建一个 .log 文件,并在该文件中不断添加日志。当日期更改时,它将创建一个包含当前日期的新文件。当文件超过特定大小限制时,此配置还将压缩文件。
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>log.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 500MB -->
<maxFileSize>300MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{0} - %msg%n</pattern>
</encoder>
</appender>
希望对您有所帮助。
我有一个 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
(请注意,我已将模式设置为每分钟滚动一次,以便于测试)
编辑:您可以删除包含 rollingPolicy
和 maxBackupIndex
的每一行 - 在这种情况下不会拾取那些
以下配置将为当前日期创建一个 .log 文件,并在该文件中不断添加日志。当日期更改时,它将创建一个包含当前日期的新文件。当文件超过特定大小限制时,此配置还将压缩文件。
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>log.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- or whenever the file size reaches 500MB -->
<maxFileSize>300MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{0} - %msg%n</pattern>
</encoder>
</appender>
希望对您有所帮助。