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

时间:2016-03-16 18:09:57

标签: java maven log4j slf4j logback

我有一个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

2 个答案:

答案 0 :(得分:1)

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

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

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

修改:您可以删除包含rollingPolicymaxBackupIndex的每一行 - 在这种情况下不会被提取

答案 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>

希望有帮助。