1宰掉、日志有什么用
日志是用來(lái)記錄追蹤程序在運(yùn)行過(guò)程中的信息的补君,我們可以利用日志很快定位問(wèn)題矿辽。
2竞膳、什么是Logback
Logback是由log4j創(chuàng)始人設(shè)計(jì)的又一個(gè)開(kāi)源日志組件
3、Logback的主要組成部分
Logback主要由三個(gè)模塊組成:
① logback-access
logback-access模塊與Servlet容器繼承齿诉,以提供HTTP訪問(wèn)日志功能筝野,我們可以使用logback-access來(lái)替換Tomcat的訪問(wèn)日志
② logback-classic
log4j的改良版,同時(shí)它提供了slf4j API粤剧,讓我們可以很方便的更換成其他日志系統(tǒng),如:log4j挥唠。(slf4j:即門(mén)面日志接口抵恋,提供了一套標(biāo)準(zhǔn)的日志功能接口,沒(méi)有具體實(shí)現(xiàn)宝磨,log4j弧关,logback都是slf4j的具體實(shí)現(xiàn))
③ logback-core
其他兩個(gè)模塊的基礎(chǔ)模塊
4、Logback主要標(biāo)簽
Logback主要用到的三個(gè)標(biāo)簽:
① logger
日志記錄器唤锉,用于存放日志對(duì)象世囊,定義日志的類型和級(jí)別等
② appender
用于指定日志輸出的目的地,也就是日志存放的媒介窿祥,這個(gè)媒介可以是控制臺(tái)株憾,可以是文件,也可以是遠(yuǎn)程套接字服務(wù)器
③ layout
用來(lái)格式化日志信息的輸出的
5晒衩、Logback的具體配置
1嗤瞎、引入logback依賴
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
2、創(chuàng)建logback配置文件logback.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--
configuration是logback的根標(biāo)簽听系;
scan="true" 表示配置文件發(fā)生了改變會(huì)自動(dòng)加載贝奇;
scanPeriod="60 seconds" 檢測(cè)配置文件修改的時(shí)間間隔,默認(rèn)的單位是毫秒靠胜,這里我們?cè)O(shè)置的表示每分鐘檢測(cè)掉瞳;
debug="false" debug如果設(shè)置為true,表示我們會(huì)打印出logback自身實(shí)時(shí)的運(yùn)行信息浪漠,這里我們就不需要了陕习,
因?yàn)閘ogback自身運(yùn)行時(shí)非常穩(wěn)定的,我們不需要對(duì)它做日志郑藏。
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<!--定義一些參數(shù)常量-->
<!--定義日志的輸出位置-->
<property name="log.filepath" value="log"/>
<!--
定義日志展示的格式
%d{yyyy-MM-dd HH:mm:ss.SSS} 定義一條日志的展示時(shí)間
[%thread] 表示執(zhí)行日志的線程名稱
%-5level 我們空出5個(gè)空格衡查,然后顯示我們的日志級(jí)別
%logger{100} 顯示我們?cè)倌膫€(gè)類(全限定類名)里面記錄的日志,后面的{100}表示這個(gè)類名展示的最大長(zhǎng)度是100
%msg 表示我們的日志信息
%n 表示換行
-->
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{100} %msg%n"/>
<property name="stdlog.pattern" value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
<!--定義日志輸出的媒介-->
<!--定義控制臺(tái)輸出必盖,class指定的是我們具體輸出位置要使動(dòng)的類-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!--appender負(fù)責(zé) 統(tǒng)一調(diào)度日志的輸出工作拌牲,而具體的日志的格式化工作和輸出的工作會(huì)交給encoder-->
<encoder>
<!--定義日志輸出的格式-->
<pattern>${stdlog.pattern}</pattern>
</encoder>
</appender>
<!--定義error級(jí)別的日志的appender俱饿,RollingFileAppender表示滾動(dòng)日志,我們可以按天或者按月來(lái)生成不同的日志文件-->
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--文件路徑-->
<file>log/tc-order-server.log</file>
<!--定義滾動(dòng)策略,TimeBasedRollingPolicy是一個(gè)基于時(shí)間的滾動(dòng)策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--
設(shè)置按每分鐘的方式來(lái)生成文件塌忽,如果我們的文件名是用.gz結(jié)尾的拍埠,那么logback會(huì)自動(dòng)幫我們壓縮日志文件,
如果我們不需要壓縮土居,我們可以直接把.gz刪除就行了
-->
<fileNamePattern>log/tc-order-server-%d{yyyy-MM-dd}.log</fileNamePattern>
<!--設(shè)置文件最大保存的歷史數(shù)據(jù)枣购,這里就默認(rèn)30份就行了-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!--定義日志格式-->
<encoder>
<!--定義日志輸出的格式-->
<pattern>${log.pattern}</pattern>
</encoder>
<!--因?yàn)槲覀兊腞OLLING只需要記錄error級(jí)別的日志,對(duì)于其他的日志我們不需要擦耀,所以我們要加一個(gè)過(guò)濾器棉圈,對(duì)于其他級(jí)別的日志,直接過(guò)濾-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<!--如果是ERROR日志眷蜓,我們同意記錄-->
<onMatch>ACCEPT</onMatch>
<!--如果不是ERROR日志分瘾,我們直接忽略-->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--
對(duì)于日志框架來(lái)說(shuō),日志是有級(jí)別的吁系,logback的日志級(jí)別有如下:
trace(追蹤) < debug(調(diào)試) < info(記錄信息) < warn(警告) < error(錯(cuò)誤)
配置我們自己寫(xiě)的代碼的日志記錄器
name="com.vgxit.logback.kkdm" 表示對(duì)應(yīng)包(包含子包)里面的類中的代碼產(chǎn)生的日志才會(huì)被下面的日志記錄器記錄德召,否則不會(huì)
level="DEBUG" 表示我們的日志記錄的級(jí)別是DEBUG,如果我們不指定level的時(shí)候汽纤,我們這個(gè)日志記錄器對(duì)應(yīng)的級(jí)別自動(dòng)繼承根記錄器
additivity="true" 表示我們自定義的記錄器日志輸出
-->
<logger name="com.itc.order" level="DEBUG" additivity="true">
<appender-ref ref="ROLLING"/>
</logger>
<!--根日志記錄器上岗,所有包下面的日志都會(huì)被記錄-->
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
6、過(guò)濾某個(gè)級(jí)別的日志
在對(duì)應(yīng)的appender標(biāo)簽中添加以下filter
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>