我有一个java web应用程序,它使用logback和slf4j进行日志记录。 这个项目有一个依赖jar(这是一个子项目)。此依赖jar使用org.apache.log4j.Logger进行日志记录。 所有日志必须放在一个日志文件中。 我的问题是,无论我使用jar文件中的代码记录,都没有写入日志文件。 最初我有logback.xml。为了解决上述问题,我将log4j.properties文件添加到了我的Web应用程序。 它解决了我的问题,现在我可以在一个文件中看到所有日志。
我的新问题再次出现:根据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
答案 0 :(得分:1)
假设您的滚动策略正确,则log4j可能会选择错误的配置。 log4j在类路径中查找第一个配置文件(第一个.xml
然后.properties
),如果它恰好是您的某个依赖项的配置,则您的滚动策略将不起作用。
要对此进行测试,您可以将系统属性-Dlog4j.configuration=...
以及配置路径添加到tomcat启动脚本中。或者只是将您的日志级别设置为TRACE / DEBUG并查看它是否会影响输出。
编辑:您的log4j配置看起来不错,但缺少日期模式。
尝试添加
log4j.appender.file.DatePattern='.'yyyy-MM-dd-HH-mm
(请注意,我已将模式设置为每分钟滚动一次,以便于测试)
修改:您可以删除包含rollingPolicy
和maxBackupIndex
的每一行 - 在这种情况下不会被提取
答案 1 :(得分:1)
以下配置将为当前日期创建一个.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>
希望有帮助。