我使用logback SLF4J作为Web应用程序中的日志框架,我想将不同的逻辑模块分离到不同的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" />
应用程序启动时,所有日志记录事件都将写入控制台。我无法弄清楚我的配置有什么问题,有没有人遇到过这个问题?
答案 0 :(得分:1)
我终于弄明白了这个问题。 logback.xml和logback-spring.xml位于同一目录中,但不在根类路径目录中,它位于log direcotry下,因此当我将include元素的资源属性更改为log /时的logback-spring.xml
<include optional="true" resource="log/logback-spring.xml" />
它完美无缺!
答案 1 :(得分:0)
实际上我们可以注册一个状态监听器来检查logback的内部状态,这样我们就可以找出配置文件中的错误。因为在解析过程中出现警告或错误时,只需在logback上打印内部状态数据在配置文件中,我们不知道在返回初始化时会发生什么。
<statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />