
logback是一个功能强大且灵活的java日志框架,它由三个主要模块组成:logback-core、logback-classic(slf4j的实现)和logback-access。其核心配置通过xml文件完成,主要涉及以下组件:
在Logback配置中,一个常见的误解是认为只要定义了Appender,日志就会自动写入到其指定的目标。然而,日志消息要最终输出到某个Appender,必须通过一个或多个Logger引用该Appender。
考虑以下Logback配置片段:
<appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/mnt/test/testLog.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/mnt/test/testLog_%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<logger name="weblogic" level="INFO" additivity="false">
<appender-ref ref="LOGFILE"/>
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>在这个配置中,LOGFILE Appender被定义,但它只被weblogic这个特定的Logger引用。这意味着:
因此,如果应用程序中没有产生weblogic相关的日志,或者产生了但级别不匹配,那么testLog.log文件将保持为空。而其他部分的日志(例如来自org.springframework或自定义类的日志)则只会输出到控制台。
为了确保应用程序的所有日志(或大部分日志)都能写入到文件,最直接且推荐的方法是将文件Appender关联到根Logger。根Logger是所有日志的最终处理者,任何未被特定Logger捕获的日志消息都将流向根Logger。
将上述配置修改为:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true">
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/mnt/test/testLog.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/mnt/test/testLog_%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 针对特定Logger的配置,例如只在控制台显示weblogic日志 -->
<logger name="weblogic" level="INFO" additivity="false">
<appender-ref ref="STDOUT"/>
</logger>
<!-- 其他特定Logger配置 -->
<logger name="org.apache" level="ERROR" />
<logger name="httpclient" level="ERROR" />
<logger name="org.test.abc" level="INFO" />
<!-- 根Logger配置,将所有未被特定Logger处理的INFO级别及以上日志同时输出到控制台和文件 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="LOGFILE" />
</root>
</configuration>通过将LOGFILE Appender添加到根Logger,所有级别为INFO或更高级别的日志消息,除非被特定Logger(如weblogic,且additivity="false")明确阻止或重定向,都将同时输出到控制台和/mnt/test/testLog.log文件。
除了上述核心问题,在配置Logback文件输出时,还需注意以下几点:
<configuration debug="true" scan="true">
<!-- ... your appenders and loggers ... -->
</configuration>观察控制台输出,看Logback是否成功初始化了LOGFILE Appender,以及是否有任何警告或错误信息。
Logback文件日志不生效的问题,多数情况下源于对Appender与Logger关联机制的误解,特别是根Logger的作用。通过将文件Appender正确地关联到根Logger,并结合权限检查、路径确认、启用调试模式以及关注日志级别匹配等排查技巧,可以有效解决大部分Logback文件输出问题。一个健壮的日志配置是应用程序稳定运行的重要保障。
以上就是Logback 文件日志配置深度解析与常见问题排查的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号