Loading...
Spring项目整合Logback日志框架

程序员笔记 2015/12/29 Spring Framework , 日志框架

1、加入maven依赖

  <!-- logback begin  --> 
               <dependency>               
                        <groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.1.3</version>
		</dependency>
		<dependency>
			<groupId>org.logback-extensions</groupId>
			<artifactId>logback-ext-spring</artifactId>
			<version>0.1.2</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>1.7.12</version>
		</dependency>
		<!-- logback end  -->

第一个logback-classic包含了logback本身所需的slf4j-api.jar、logback-core.jar及logback-classsic.jar

第二个logback-ext-spring是由官方提供的对Spring的支持,它的作用就相当于log4j中的Log4jConfigListener;这个listener,网上大多都是用的自己实现的,原因在于这个插件似乎并没有出现在官方文档的显要位置导致大多数人并不知道它的存在

第三个jcl-over-slf4j是用来把Spring源代码中大量使用到的commons-logging替换成slf4j,只有在添加了这个依赖之后才能看到Spring框架本身打印的日志,否则只能看到开发者自己打印的日志


2、日志配置文件"log/logback.xml"

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

	<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="${user.dir}" />

	<!-- 控制台输出 -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder charset="UTF-8">
			<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
			<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
		</encoder>
	</appender>
	
	<!-- 按照每天生成日志文件 -->
	<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_HOME}/logs/system.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<!--日志文件输出的文件名-->
			<fileNamePattern>${LOG_HOME}/logs/system.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
		</rollingPolicy>
		<encoder>
			<pattern>%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
		</encoder>
	</appender>
	
	<appender name="businessLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_HOME}/logs/system_business.log</file>
		<!-- 按每小时滚动文件,如果一个小时内达到10M也会滚动文件, 滚动文件将会压缩成zip格式 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_HOME}/logs/system_business_%d{yyyy-MM-dd_HH}.%i.zip</fileNamePattern>
			<!--日志文件最大的大小-->
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>10MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
		</rollingPolicy>
		<!-- 独立的pattern -->
		<encoder charset="UTF-8">
			<pattern>%d{HH:mm:ss.SSS},%msg%n</pattern>
		</encoder>
	</appender>
	
	<!-- business log 使用独立的appender,不继承Root的appender -->
	<logger name="business" level="INFO" additivity="false">
		<appender-ref ref="businessLogFile" />
	</logger>

	<!-- 日志输出级别 -->
	<root level="DEBUG">
		<appender-ref ref="console" />
		<appender-ref ref="rollingFile" />
		<appender-ref ref="businessLogFile" />
	</root>
	
	<!-- 下面配置一些第三方包的日志过滤级别,用于避免刷屏,additivity属性为false,表示此loger的打印信息不再向上级传递,默认为true -->
    <logger name="org.hibernate" level="error" additivity="false" />
    <logger name="org.springframework" level="error" additivity="false" />
    <logger name="com.opensymphony" level="WARN" />
    <logger name="org.apache" level="info" />
    <logger name="java.sql.Connection" level="DEBUG" />
    <logger name="java.sql.Statement" level="DEBUG" />
    <logger name="java.sql.PreparedStatement" level="DEBUG" />
	
</configuration>


3、web.xml配置文件添加如下内容配置

	<!-- logback监听配置,context-param必须独立配置 -->
	<context-param>
    	<param-name>logbackConfigLocation</param-name>
    	<param-value>classpath:log/logback.xml</param-value>
	</context-param>
	<listener>
    	<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
	</listener>

注意,该配置文件必须放在<context-param>...</context-param>配置文件之后,如果没有会导致Logback找不到自定义的配置文件,而使用默认的配置文件,从而导致配置没有生效


参考文档:

http://logback.qos.ch/

http://blog.csdn.net/sadfishsc/article/details/47160213



Comments