一、xml文件總體架構: java
<?xml version="1.0" encoding="UTF-8"?>
<configuration >
<contextName></contextName>
<property name="" value="" />
<appender ></appender>
<root > </root>
<logger />
</configuration>mysql
二、詳解:web
<configuration >:參數spring
一、scan:當此屬性設置爲true時,配置文件若是發生改變,將會被從新加載,默認值爲true 二、 canPeriod:設置監測配置文件是否有修改的時間間隔,若是沒有給出時間單位,默認單位是毫 秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘sql
三、debug:當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默 認值爲false數據庫
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<contextName>:每一個logger都關聯到logger上下文,默認上下文名稱爲「default」。但可使用設置成其餘名字,用於區分不一樣應用程序的記錄。一旦設置,不能修改,能夠經過%contextName來打印日誌上下文名稱。apache
<contextName>spring-boot-logging</contextName>
<property name="" value="" /> :用來定義變量值的標籤,有兩個屬性,name和value;其中name的值是變量的名稱,value的值時變量定義的值。經過定義的值會被插入到logger上下文中。定義變量後,可使「${}」來使用變量mybatis
<property name="log.path" value="d:/log" />
<appender ></appender>:appender:用來格式化日誌輸出節點,有倆個屬性name和class,class用來指定哪一種輸出策略,經常使用就是控制檯輸出策略和文件輸出策略。架構
<!--輸出到控制檯--> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender>
append屬性:併發
name:該append的名字,在後面使用ref來匹配。(通常使用console或file,簡單明瞭)
class: 用來指定哪一種輸出策略。通常有3種
一、控制檯:class="ch.qos.logback.core.ConsoleAppender"
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <!-- 級別過濾 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender>
filter是一個過濾器,表示對輸出到控制檯的日記進行過濾。有兩種過濾器,分別爲LevelFilter 和ThresholdFilter。執行一個過濾器會有返回個枚舉值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日誌將當即被拋棄再也不 通過其餘過濾器;返回NEUTRAL,有序列表裏的下個過濾器接着處理日誌;返回ACCEPT,日誌會被當即處理,再也不通過剩餘過濾器。
LevelFilter 爲級別過濾器,根據日誌級別進行過濾。其下有三個子節點,level表示過濾的級別,用於配置符合過濾條件的操做,ACCEPT符合級別的輸出到控制檯,用於配置不符合過濾條件的操做,DENY不符合的拒絕輸出到控制檯。
ThresholdFilter爲臨界值過濾器,過濾掉低於指定臨界值的日誌。當日志級別等於或高於臨界值時,過濾器返回NEUTRAL;當日志級別低於臨界值時,日誌會被拒絕。
表示對日誌進行格式化
%d{HH:mm:ss.SSS} :日誌的輸出時間
%contextName : 上下文名稱
%thread : 輸出日誌的進程名字,這在Web應用以及異步任務處理中頗有用
%-5level : 日誌級別,而且使用5個字符靠左對齊
%logger{36} : 日誌輸出者的名字(通常爲類名),名字最長36個字符,不然按照句點分割
%msg : 具體的日誌消息
%n :換行符
二、文件:class="ch.qos.logback.core.FileAppender"
<configuration> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>${log.path}/spring-boot-logging.log</file> <append>true</append> <encoder> <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> </configuration>
三、按照固定切分好比天天生成一個日誌文件class="ch.qos.logback.core.rolling.RollingFileAppender"
<!--輸出到文件--> <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/spring-boot-logging.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/spring-boot-logging.%d{yyyy-MM-dd}.log.zip</fileNamePattern> <!-- 日誌保存週期 --> <maxHistory>30</maxHistory> <!-- 總大小 --> <totalSizeCap>1GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender>
常見的日誌輸出到文件,隨着應用的運行時間愈來愈長,日誌也會增加的愈來愈多,將他們輸出到同一個文件並不是一個好辦法。RollingFileAppender用於切分文件日誌。
其中file屬性定義文件的帶全路徑的文件名,重要的是rollingPolicy的定義。
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"是最經常使用的滾動策略,它根據時間來制定滾動策略,既負責滾動也負責觸發滾動
<fileNamePattern>${log.path}/spring-boot-logging.%d{yyyy-MMdd}.log.zip</fileNamePattern>定義了日誌的切分方式——把每一天的日誌歸檔到一個文件中,同理,可使用%d{yyyy-MM-dd HH-mm}來定義精確到分的日誌切分方式。
<maxHistory>30</maxHistory>表示只保留最近30天的日誌
<totalSizeCap>1GB</totalSizeCap>用來指定日誌文件的上限大小,例如設置爲1GB的話,那麼到了這個值,就會刪除舊的日誌
子節點loger
<loger>用來設置某一個包或者具體的某一個類的日誌打印級別、以及指定<appender>
<loger>僅有一個name屬性,一個可選的level和一個可選的addtivity屬性
name:用來指定受此loger約束的某一個包或者具體的某一個類。
level:用來設置打印級別,若是未設置此屬性,那麼當前loger將會繼承上級的級別。
addtivity:是否向上級loger傳遞打印信息。默認是true。
<loger> 的實際使用有兩種狀況
第一種是不指定level,不指定appender
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<logger name="com.baiding.logging.SpringBootLoggingApplicationTests"/>
這時候的處理流程是:當SpringBootLoggingApplicationTests執行日誌方法時,首先交給
<logger name="com.baiding.logging.SpringBootLoggingApplicationTests"/>
處理(繼承上級的level–info),將級別大於等於info的日誌交給root,自己沒有打印任何日誌
第二種是指定了level,指定了appender
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<!-- java中的包 -->
<logger name="com.baiding" level="warn" addtivity="false">
<appender-ref ref="console" />
</logger>
此logger指定了level爲warn,addtivity爲false,不在向上級傳遞打印信息,若設置了<appender-ref>屬性,但沒有設置addtivity爲false,則com.baiding包下的日誌會先在名爲console的appender記錄一次,以後傳遞給上級,root又會在名爲console和file的appender記錄一次,這樣就打印了兩次了。
SpringBoot在使用logback記錄日誌時,推薦使用logback-spring.xml的格式,這樣的話,日誌框架就不直接加載日誌的配置項,而是由SpringBoot解析日誌配置,就可使用SpringBoot 的高級Profile功能
以下logback-spring.xml
<springProfile name="dev">
<logger name="com.baiding" level="info"/>
</springProfile>
<springProfile name="prod">
<logger name="com.baiding" level="warn"/>
</springProfile>
能夠在不一樣的節點中使用springProfile功能,用於指定某段配置只在某個環境下生效 。固然使用前,要激活profile。
3、切換Log4j2框架
Spring Boot雖然默認使用Logback日誌框架,但其內部也集成了Log4j2框架。要知道的是,在Java中,Log4j2框架的性能是最強的,因此咱們通常在程序中使用Log4j2框架。下面介紹一下Log4j2的使用及其內部屬性的含義。
首先,要在Spring Boot使用Log4j2的話,那麼第一件事就是去除Logback的jar包,並引入Log4j2的jar。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
上面就是在依賴Web模塊的時候去除引用spring-boot-starter-logging.jar,以後依賴spring-boot-starter-log4j2.jar包。
以後在類路徑下新建一個log4j2.xml,其具體內容以下:
<?xml version="1.0" encoding="UTF-8"?>
<!--日誌級別以及優先級排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration後面的status,這個用於設置log4j2自身內部的信息輸出,能夠不設置,當設置成trace時,你會看到log4j2內部各類詳細輸出-->
<!--monitorInterval:Log4j可以自動檢測修改配置 文件和從新配置自己,設置間隔秒數-->
<configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="log.path">log</Property>
</Properties>
<!--先定義全部的appender-->
<appenders>
<!--這個輸出控制檯的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--輸出日誌的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
<File name="log" fileName="${log.path}/test.log" append="false">
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</File>
<RollingFile name="RollingFileInfo" fileName="${log.path}/info.log"
filePattern="${log.path}/logs/${date:yyyy-MM}/info-%d{yyyy-MM-dd}.log.zip">
<!--只輸出level及以上級別的信息(onMatch),其餘的直接拒絕(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>
</RollingFile>
</appenders>
<!--而後定義logger,只有定義了logger並引入appender,appender纔會生效-->
<loggers>
<!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
<logger name="org.springframework" level="INFO"/>
<logger name="org.mybatis" level="INFO"/>
<logger name="com.baiding" level="INFO"/>
<root level="info">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
</root>
</loggers>
</configuration>
1. 根節點屬性
根節點Configuration有兩個屬性,status和monitorinterval
status : status用來指定log4j2自己的日誌的級別
monitorinterval : monitorinterval用於指定log4j自動從新配置的監測間隔時間,單位是s,最小是5s
####2. Properties 標籤
在xml文件中,可使用Properties 標籤來自定義變量,方便其餘地方的引用。
<Properties>
<Property name="log.path">log</Property>
</Properties>
這裏的log.path是定義日誌存放的地方,此處是存放於項目根路徑下的log文件夾中
3.Appenders 節點
和logback同樣,Appender是用來定義日誌輸出點的,通常經常使用有三個子節點,分別爲Console、RollingFile、File。下面介紹一下各個子節點的用處及經常使用的屬性
Console節點用來定義輸出到控制檯的Appender:
name : 指定Appender的名字,用於Logger節點引用
target : SYSTEM_OUT 或 SYSTEM_ERR,通常設置爲:SYSTEM_OUT
PatternLayout : 指定日誌輸出格式,默認爲%m%n
<console name="Console" target="SYSTEM_OUT">
<!--輸出日誌的格式-->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
File節點用來定義輸出到指定位置的文件的Appender:
name : 指定Appender的名字,用於Logger節點引用
fileName : 指定輸出日誌的目的文件帶全路徑的文件名
append : 是否追加,默認爲ture。ture是將新日誌追加到原日誌文件尾部,false則是刪除已有文件,重建新文件
PatternLayout : 指定日誌輸出格式,默認爲%m%n
<File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</File>
RollingFile節點用來定義輸出到指定位置的文件的Appender,但其記錄的內容可拆分:
File對文件的約束很簡單,而RollingFile則比較靈活,其可根據文件大小來分拆,還能夠根據時間來分拆
name : 指定Appender的名字,用於Logger節點引用
fileName : 指定輸出日誌的目的文件帶全路徑的文件名
filePattern:指定拆分出去的日誌文件的全路徑的文件名以及格式
PatternLayout : 指定日誌輸出格式,默認爲%m%n
Policies : 指定滾動日誌的策略,就是何時進行新建日誌文件輸出日誌.
TimeBasedTriggeringPolicy : 基於時間進行日誌的滾動
SizeBasedTriggeringPolicy : 基於文件大小進行日誌的滾動
ThresholdFilter : 日誌過濾器
<RollingFile name="RollingFileInfo" fileName="${log.path}/info.log"
filePattern="${log.path}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.zip">
<!--只輸出level及以上級別的信息(onMatch),其餘的直接拒絕(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>
</RollingFile>
這裏說一下TimeBasedTriggeringPolicy這個滾動策略的屬性interval,它是指日誌進行滾動的間隔,那麼它的單位具體是什麼呢?關鍵點在於filePattern的日誌文件名所含有的日期格式%d{yyyy-MM-dd},這裏日期格式具體到了天,那麼以天爲單位,如果日期具體到%d{yyyy-MM-dd-HH-mm}分鐘的話,那麼就是以分鐘爲單位。
這裏還提到了日誌過濾器,Log4j提供了許多的日誌過濾器,具體能夠看下文檔 Filters。但咱們通常採用ThresholdFilter,這個過濾器通常用來過濾掉全部級別低於它定義的級別的日誌。
4.Loggers節點
Loggers節點下通常有root和logger節點.
root節點用來指定項目的根日誌,若是沒有單獨指定logger,那麼就會默認使用該root日誌輸出。
level :日誌輸出級別,共有8個級別,按照從低到高爲:All < Trace < Debug < Info < Warn < Error < Fatal < OFF.
appender-ref :root的子節點,用來指定該日誌輸出到哪一個Appender
<root level="info">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
</root>
Logger節點用來單獨指定日誌的形式,好比要爲某個包下全部的class或者某個具體的class指定不一樣的日誌級別等。
level : 日誌輸出級別
name : 用來指定該Logger所適用的類或者包.
AppenderRef :Logger的子節點,用來指定該日誌輸出到哪一個Appender,若是沒有指定,就會默認繼承自Root
additivity :是否向上級傳遞日誌 true(默認)或false
<!--過濾掉spring和mybatis的一些無用的DEBUG信息-->
<logger name="org.springframework" level="INFO"/>
<logger name="org.mybatis" level="INFO"/>
<logger name="com.baiding" level="INFO"/>
若咱們爲logger指定了AppenderRef ,別忘了將logger的additivity 屬性設置爲false,要否則日誌可能會在指定的Appender中輸出兩遍
4、Log4j2異步輸出日誌
Log4j2有個突出的功能就是支持高效低延遲的異步化寫日誌。日誌異步輸出的好處在於,使用單獨的進程來執行日誌打印的功能,能夠提升日誌執行效率,減小日誌功能對正常業務的影響。
日誌的異步輸出使用了disruptor這個開源的併發框架,因此首先得導入disruptor.jar包
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.2</version>
</dependency>
異步輸出分爲兩種狀況,一種爲全異步模式,一種爲異步和非異步混合輸出模式。經過官方的性能對比,通常線程數在2-16之間的話,混合使用同步和異步的logger來打印日誌,性能是最好的。
異步和非異步混合模式
這種模式的啓用,主要在於兩個節點的使用,分別爲AsyncRoot和AsyncLogger,這兩個節點能夠和Root 或 Logger節點混合使用。
在這裏修改一下上述的log4j2.xml文件中Loggers節點就能夠了。
<loggers>
<AsyncRoot level="info">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
</AsyncRoot>
<AsyncLogger name="com.baiding" level="INFO" />
<AsyncLogger name="org.mybatis" level="INFO" />
<AsyncLogger name="org.springframework" level="INFO" />
</loggers>
下面是文正的xml代碼及註釋說明:
?xml version="1.0" encoding="UTF-8"?> <configuration scan="true"> <!--定義日誌文件的存儲地址 勿在 LogBack 的配置中使用相對路徑--> <property name="LOG_NAME" value="/home"></property> <!-- %m輸出的信息,%p日誌級別,%t線程名,%d日期,%c類的全名,,,, --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <!--<pattern>%d %p (%file:%line\)- %m%n</pattern>--> <!--格式化輸出:%d:表示日期 %thread:表示線程名 %-5level:級別從左顯示5個字符寬度 %msg:日誌消息 %n:是換行符--> <pattern>1-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern> <charset>GBK</charset> </encoder> </appender> <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>--> <contextName>RestAPI</contextName> <property name="LOG_PATH" value=".logs"/> <!--設置系統日誌目錄--> <property name="APPDIR" value="app"/> <!-- 說明: 一、日誌級別及文件 日誌記錄採用分級記錄,級別與日誌文件名相對應,不一樣級別的日誌信息記錄到不一樣的日誌文件中 例如:error級別記錄到log_error_xxx.log或log_error.log(該文件爲當前記錄的日誌文件),而log_error_xxx.log爲歸檔日誌, 日誌文件按日期記錄,同一天內,若日誌文件大小等於或大於2M,則按0、一、2...順序分別命名 例如log-level-2013-12-21.0.log 其它級別的日誌也是如此。 二、文件路徑 若開發、測試用,在Eclipse中運行項目,則到Eclipse的安裝路徑查找logs文件夾,以相對路徑../logs。 若部署到Tomcat下,則在Tomcat下的logs文件中 三、Appender FILEERROR對應error級別,文件名以log-error-xxx.log形式命名 FILEWARN對應warn級別,文件名以log-warn-xxx.log形式命名 FILEINFO對應info級別,文件名以log-info-xxx.log形式命名 FILEDEBUG對應debug級別,文件名以log-debug-xxx.log形式命名 CONSOLE將日誌信息輸出到控制上,爲方便開發測試使用 --> <!-- 日誌記錄器,日期滾動記錄 --> <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在記錄的日誌文件的路徑及文件名 --> <file>${LOG_PATH}/${APPDIR}/log_error.log</file> <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 歸檔的日誌文件的路徑,例現在天是2013-12-21日誌,當前寫的日誌文件路徑爲file節點指定,能夠將此文件與file指定文件路徑設置爲不一樣路徑,從而將當前日誌文件或歸檔日誌文件置不一樣的目錄。 而2013-12-21的日誌文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!--壓縮日誌文件 --> <!--<fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.log.zip</fileNamePattern>--> <!--日誌文件保留天數30天 --> <maxHistory>30</maxHistory> <!-- 除按日誌記錄以外,還配置了日誌文件不能超過2M,若超過2M,日誌文件會以索引0開始, 命名日誌文件,例如log-error-2013-12-21.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>2MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 追加方式記錄日誌 --> <append>true</append> <!-- 日誌文件的格式 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!-- 此日誌文件只記錄info級別的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>error</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 日誌記錄器,日期滾動記錄 --> <appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在記錄的日誌文件的路徑及文件名 --> <file>${LOG_PATH}/${APPDIR}/log_warn.log</file> <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 歸檔的日誌文件的路徑,例現在天是2013-12-21日誌,當前寫的日誌文件路徑爲file節點指定,能夠將此文件與file指定文件路徑設置爲不一樣路徑,從而將當前日誌文件或歸檔日誌文件置不一樣的目錄。 而2013-12-21的日誌文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日誌記錄以外,還配置了日誌文件不能超過2M,若超過2M,日誌文件會以索引0開始, 命名日誌文件,例如log-error-2013-12-21.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>2MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 追加方式記錄日誌 --> <append>true</append> <!-- 日誌文件的格式 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!-- 此日誌文件只記錄info級別的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>warn</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- 日誌記錄器,日期滾動記錄 --> <appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 正在記錄的日誌文件的路徑及文件名 --> <file>${LOG_PATH}/${APPDIR}/log_info.log</file> <!-- 日誌記錄器的滾動策略,按日期,按大小記錄 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 歸檔的日誌文件的路徑,例現在天是2013-12-21日誌,當前寫的日誌文件路徑爲file節點指定,能夠將此文件與file指定文件路徑設置爲不一樣路徑,從而將當前日誌文件或歸檔日誌文件置不一樣的目錄。 而2013-12-21的日誌文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 --> <fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- 除按日誌記錄以外,還配置了日誌文件不能超過2M,若超過2M,日誌文件會以索引0開始, 命名日誌文件,例如log-error-2013-12-21.0.log --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>2MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 追加方式記錄日誌 --> <append>true</append> <!-- 日誌文件的格式 --> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>===%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!-- 此日誌文件只記錄info級別的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>info</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--日誌異步到數據庫 --> <!--<appender name="DBAPPENDER" class="ch.qos.logback.classic.db.DBAppender">--> <!--<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">--> <!--<dataSource class="com.zaxxer.hikari.HikariDataSource">--> <!--<driverClassName>com.mysql.jdbc.Driver</driverClassName>--> <!--<jdbcUrl>jdbc:mysql://localhost:3306/albedo-new?useUnicode=true&characterEncoding=utf8&useSSL=false</jdbcUrl>--> <!--<username>root</username>--> <!--<password>123456</password>--> <!--<poolName>HikariPool-logback</poolName>--> <!--</dataSource>--> <!--</connectionSource>--> <!--<!– 此日誌文件只記錄info級別的 –>--> <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">--> <!--<level>warn</level>--> <!--<onMatch>ACCEPT</onMatch>--> <!--<onMismatch>DENY</onMismatch>--> <!--</filter>--> <!--<!– 此日誌文件只記錄info級別的 –>--> <!--<filter class="ch.qos.logback.classic.filter.LevelFilter">--> <!--<level>error</level>--> <!--<onMatch>ACCEPT</onMatch>--> <!--<onMismatch>DENY</onMismatch>--> <!--</filter>--> <!--</appender>--> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Line:%-3L - %msg%n</pattern> <!--<charset>GBK</charset>--> </encoder> </appender> <logger name="com.minlia" level="DEBUG"/> <logger name="org.springframework.data.mybatis" level="DEBUG"/> <logger name="org.springframework.aop.aspectj" level="ERROR"/> <logger name="javax.activation" level="WARN"/> <logger name="javax.mail" level="WARN"/> <logger name="javax.xml.bind" level="WARN"/> <logger name="ch.qos.logback" level="INFO"/> <logger name="com.codahale.metrics" level="WARN"/> <logger name="com.ryantenney" level="WARN"/> <logger name="com.sun" level="WARN"/> <logger name="com.zaxxer" level="WARN"/> <logger name="io.undertow" level="WARN"/> <logger name="net.sf.ehcache" level="WARN"/> <logger name="org.apache" level="WARN"/> <logger name="org.apache.catalina.startup.DigesterFactory" level="OFF"/> <logger name="org.bson" level="WARN"/> <logger name="org.hibernate.validator" level="WARN"/> <logger name="org.hibernate" level="WARN"/> <logger name="org.hibernate.ejb.HibernatePersistence" level="OFF"/> <logger name="org.springframework.web" level="INFO"/> <logger name="org.springframework.security" level="WARN"/> <logger name="org.springframework.cache" level="WARN"/> <logger name="org.thymeleaf" level="WARN"/> <logger name="org.xnio" level="WARN"/> <logger name="springfox" level="WARN"/> <logger name="sun.rmi" level="WARN"/> <logger name="liquibase" level="WARN"/> <logger name="sun.rmi.transport" level="WARN"/> <logger name="jdbc.connection" level="ERROR"/> <logger name="jdbc.resultset" level="ERROR"/> <logger name="jdbc.resultsettable" level="INFO"/> <logger name="jdbc.audit" level="ERROR"/> <logger name="jdbc.sqltiming" level="ERROR"/> <logger name="jdbc.sqlonly" level="INFO"/> <!--<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">--> <!--<resetJUL>true</resetJUL>--> <!--</contextListener>--> <springProfile name="production"> <root level="DEBUG"> <!--<appender-ref ref="FILEERROR"/>--> <!--<appender-ref ref="FILEWARN"/>--> <!--<appender-ref ref="FILEINFO"/>--> <!--<appender-ref ref="DBAPPENDER"/>--> <appender-ref ref="STDOUT"/> </root> </springProfile> <springProfile name="dev"> <root level="DEBUG"> <!--<appender-ref ref="FILEERROR"/>--> <!--<appender-ref ref="FILEWARN"/>--> <!--<appender-ref ref="FILEINFO"/>--> <!--<appender-ref ref="DBAPPENDER"/>--> <appender-ref ref="CONSOLE"/> </root> </springProfile> </configuration>