第一步,添加依賴
<properties>
<logback.version>1.2.3</logback.version>
</properties>
<!-- logback 日志使用 開始 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>0.1.4</version>
</dependency>
<!-- logback 日志使用 結(jié)束 -->
第二步配置web.xml 讀取日志文件,并添加監(jiān)聽
<!-- 添加日志監(jiān)聽器 -->
<context-param>
<param-name>logbackConfigLocation</param-name>
<param-value>classpath:logback.xml</param-value>
</context-param>
<listener>
<listener-class>ch.qos.logback.ext.spring.web.LogbackConfigListener</listener-class>
</listener>
第三步,添加logback.xml到resources下面
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--參數(shù)可以配置在配置文件中,這里要在最上面引入配置文件,使用${key}獲取值 -->
<property resource="application.properties"/>
<property name="log.root.level" value="${log.root.level}" /> <!-- 日志級(jí)別 -->
<property name="log.base" value="/opt/logs/education-government" /> <!-- 日志路徑 -->
<property name="log.moduleName" value="log" /> <!-- 模塊名稱葡公, 影響日志配置名,日志文件名 -->
<property name="log.max.size" value="20MB" /> <!-- 日志文件大小 也可以不設(shè)置大小,只按照時(shí)間來滾動(dòng)記錄 -->
<!--控制臺(tái)輸出 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%logger{56}.%method\(\):%L -%msg%n</Pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${log.root.level}</level>
</filter>
</appender>
<!-- 按照小時(shí)生成日志文件 -->
<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.base}/${log.moduleName}.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件輸出的文件名 按照小時(shí)切割 yyyy-MM-dd這樣是按照天滾動(dòng)保存日志-->
<FileNamePattern>${log.base}/${log.moduleName}_%d{yyyy-MM-dd.HH}.%i.log</FileNamePattern>
<!--控制最多保留多少數(shù)量 如果是按日滾動(dòng),那么一天有1個(gè)日志文件,240 代表能保存240個(gè)文件,就是 8天 (意思是保存八個(gè)月) 這里是按照HH 到小時(shí),所以一天產(chǎn)生24個(gè),也就是能保存10天的日志量-->
<MaxHistory>240</MaxHistory>
<!--日志文件切割大小-->
<maxFileSize>${log.max.size}</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期条霜,%thread表示線程名催什,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--輸出級(jí)別攔截-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>${log.root.level}</level>
</filter>
</appender>
<!--不管什么級(jí)別日志,都只攔截錯(cuò)誤日志-->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.base}/${log.moduleName}.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!--日志文件輸出的文件名-->
<FileNamePattern>${log.base}/${log.moduleName}_%d{yyyy-MM-dd.HH}.%i.log</FileNamePattern>
<!--日志文件保留小時(shí)數(shù) 如果是按照天切割,則代表是天數(shù)-->
<MaxHistory>240</MaxHistory>
<!--日志文件切割大小-->
<maxFileSize>${log.max.size}</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化輸出:%d表示日期宰睡,%thread表示線程名蒲凶,%-5level:級(jí)別從左顯示5個(gè)字符寬度%msg:日志消息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<!-- 用來設(shè)置某一個(gè)包或者具體的某一個(gè)類的日志打印級(jí)別,addtivity代表是否向上級(jí)root傳遞打印信息拆内。默認(rèn)是true-->
<logger name="com.ssic" >
<level value="${log.root.level}" />
<!-- 標(biāo)識(shí)這個(gè)appender將會(huì)添加到這個(gè)logger -->
<appender-ref ref="stdout" />
<appender-ref ref="INFO" />
<appender-ref ref="ERROR" />
</logger>
<logger name="org.springframework" additivity="false">
<level value="${log.root.level}"/>
<!-- 標(biāo)識(shí)這個(gè)appender將會(huì)添加到這個(gè)logger -->
<appender-ref ref="stdout" />
<appender-ref ref="INFO" />
<appender-ref ref="ERROR" />
</logger>
<!-- root 只有一個(gè)level屬性-->
<root level="${log.root.level}">
<!-- 標(biāo)識(shí)這個(gè)appender將會(huì)添加到這個(gè)root -->
<appender-ref ref="stdout" />
<appender-ref ref="INFO" />
<appender-ref ref="ERROR" />
</root>
</configuration>
說明
<logger />標(biāo)簽和<root/> 區(qū)別
1.<logger />標(biāo)簽有三個(gè)屬性
name:可以給一個(gè)包路徑或者具體到某個(gè)類
level:日志打印級(jí)別
addtivity:默認(rèn)值true 是否將logger中的日志上傳到<root />
2 <root/> 是日志最終輸出的跟節(jié)點(diǎn),上面的logger日志也會(huì)從這里輸出出去
只有一個(gè)屬性:level 日志級(jí)別
區(qū)別:
logger可以定制化打印,比如:
<logger name="com.xxx" /> 打印com.xxx包下面的日志