logback 包含的记录器不起作用
logback included logger does not work
我在 Web 应用程序中使用 logback SLF4J 作为日志记录框架,我想将不同的逻辑模块分离到不同的 logback 配置文件中,并将它们包含在中央配置文件中。所以我得到了 logback-spring.xml
和 logback.xml
(中环),logback-spring.xml
是:
<included>
<logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" level="INFO" additivity="false">
<appender-ref ref="REST" />
</logger>
<logger name="org.springframework" level="INFO" additivity="false">
<appender-ref ref="REST" />
</logger>
</included>
和logback.xml
是:
<configuration scan="true" scanPeriod="30 seconds">
<contextName>TestSuite</contextName>
<property scope="context" resource="properties/logback.properties" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{HH:mm:ss.SSS} %-5level %logger{80} [%file:%line] - %msg%n</Pattern>
</encoder>
</appender>
<appender name="REST" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME:-${java.io.tmpdir}}/RestApi.txt</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME:-${java.io.tmpdir}}/%d{yyyy-MM/ww,aux}/RestApi.%d{yyyy-MM-dd}.log.gz</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{80} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
<include optional="true" resource="logback-spring.xml" />
当应用程序启动时,所有日志记录事件都会写入控制台。我不知道我的配置有什么问题,有人遇到过这个问题吗?
终于找到问题了。 logback.xml 和 logback-spring.xml 位于同一目录,但不在根类路径目录中,它在日志目录下,因此当我将 include 元素的资源属性更改为 log/logback-spring 时。 xml
<include optional="true" resource="log/logback-spring.xml" />
它工作得很好!
其实我们可以注册一个状态侦听器来检查logback的内部状态,这样我们就可以找出配置文件中的错误。'因为logback只是在发生警告或错误时在控制台上打印其内部状态数据解析配置文件,否则我们不知道logback初始化时发生了什么。
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
我在 Web 应用程序中使用 logback SLF4J 作为日志记录框架,我想将不同的逻辑模块分离到不同的 logback 配置文件中,并将它们包含在中央配置文件中。所以我得到了 logback-spring.xml
和 logback.xml
(中环),logback-spring.xml
是:
<included>
<logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" level="INFO" additivity="false">
<appender-ref ref="REST" />
</logger>
<logger name="org.springframework" level="INFO" additivity="false">
<appender-ref ref="REST" />
</logger>
</included>
和logback.xml
是:
<configuration scan="true" scanPeriod="30 seconds">
<contextName>TestSuite</contextName>
<property scope="context" resource="properties/logback.properties" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d{HH:mm:ss.SSS} %-5level %logger{80} [%file:%line] - %msg%n</Pattern>
</encoder>
</appender>
<appender name="REST" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_HOME:-${java.io.tmpdir}}/RestApi.txt</File>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME:-${java.io.tmpdir}}/%d{yyyy-MM/ww,aux}/RestApi.%d{yyyy-MM-dd}.log.gz</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>%date{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{80} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
<include optional="true" resource="logback-spring.xml" />
当应用程序启动时,所有日志记录事件都会写入控制台。我不知道我的配置有什么问题,有人遇到过这个问题吗?
终于找到问题了。 logback.xml 和 logback-spring.xml 位于同一目录,但不在根类路径目录中,它在日志目录下,因此当我将 include 元素的资源属性更改为 log/logback-spring 时。 xml
<include optional="true" resource="log/logback-spring.xml" />
它工作得很好!
其实我们可以注册一个状态侦听器来检查logback的内部状态,这样我们就可以找出配置文件中的错误。'因为logback只是在发生警告或错误时在控制台上打印其内部状态数据解析配置文件,否则我们不知道logback初始化时发生了什么。
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />