原网址:https://blog.csdn.net/hongweigg/article/details/52064620
springMVC中用logback.xml配置日志,配置文件如下:
<!-- @declare: 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!-- @declare: 控制台日志的输出格式 layout和encoder有什么区别 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- @declare: 格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
<Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} ---> %msg%n</Pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- @declare: 给不同的包定义不同的日志级别 -->
<logger name="com.silencer.web" level="info" />
<!-- @declare: 日志输出级别 启用上面配置的哪个日志,如果没有file,则不会在创建的日志文件中写入内容和immediateFlush=true联用-->
<root level="info">
<appender-ref ref="CONSOLE" />
</root>
配置的日志级别是info级别,但在控制台打印的日志却是debug级别,日志部分信息如下
信息: Initializing Spring root WebApplicationContext
17:28:52.708 [localhost-startStop-1] INFO org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started
17:28:52.819 [localhost-startStop-1] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Adding PropertySource 'servletConfigInitParams' with lowest search precedence
17:28:52.819 [localhost-startStop-1] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Adding PropertySource 'servletContextInitParams' with lowest search precedence
17:28:52.834 [localhost-startStop-1] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Adding PropertySource 'jndiProperties' with lowest search precedence
17:28:52.834 [localhost-startStop-1] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
17:28:52.834 [localhost-startStop-1] DEBUG org.springframework.web.context.support.StandardServletEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
分析:查看日志发现控制台打印日志和上述配置日志格式不同,所以,自己配置的日志格式没有起作用。
原因:spring 启动的监听器(org.springframework.web.context.ContextLoaderListener) 在logback日志配置监听器(ch.qos.logback.ext.spring.web.LogbackConfigListener)之前加载,这时日志配置尚未加载,SPRING容器已启动,采用缺省的logback配置,随后即便logback日志加载成功,logback级别已经为DEBUG,且不能再改回来
解决:将spring 启动的监听器(org.springframework.web.context.ContextLoaderListener)和logback日志配置监听器(ch.qos.logback.ext.spring.web.LogbackConfigListener)调换加载顺序
修改web.xml文件,将logback的监听器和spring启动监听器调换顺序,如下所示
<!-- logback日志监听器 -->
<listener>
<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>
<!-- spring容器监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
自己分析问题是提高自己的阶梯....