目錄
- 1.logback 組態檔的組成
- 1.1root節點
- 1.2.property節點
- 1.3.appender節點
- 1.3.1 ch.qos.logback.core.ConsoleAppender
- 1.3.2 ch.qos.logback.core.FileAppender
- 1.3.3 ch.qos.logback.core.rolling.RollingFileAppender
- 1.3.4 ch.qos.logback.classic.AsyncAppender
- 1.3.5 rollingPolicy
- 2.組態檔例子
- 3 spring boot 使用logback日志
- 3.1 簡單使用
- 3.2 多環境日志輸出
1.logback 組態檔的組成
1.1root節點
root 節點是必選節點,用來指定最基礎的日志輸出級別,只有一個 level 屬性,用于設定列印級別,可選如下:TRACE,DEBUG,INFO,WARN,ERROR,ALL,OFF,
root 節點可以包含 0 個或多個元素,將appender添加進來,如下:
<root level="debug">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
appender 也是子節點之一,將會在后面說明,
1.2.property節點
用于定義變數,方便使用,有兩個屬性:name,value,定義變數后,可以使用${}來使用變數,如下:
<property name="path" value="https://www.cnblogs.com/bmbi/p/log"/>
<property name="appname" value="https://www.cnblogs.com/bmbi/p/app"/>
1.3.appender節點
? appender中有2個必填屬性--name和class,name為節點的名稱,class為的全限定類名,也就是日志輸出目的地的處理類,其中,encoder子節點用來控制日志的輸出格式
<appender name="CONSOLE" >
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
appender 用來格式化日志輸出的節點,這個最重要,有兩個屬性:
- name:該本 appender 命名
- class:指定輸出策略,通常有兩種:控制臺輸出,檔案輸出
下面通過例子來說明這個怎么用:
在logback中,主要有以下三種日志目的地處理類:
1.3.1 ch.qos.logback.core.ConsoleAppender
? 將日志輸出到控制臺
<appender name="CONSOLE" >
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern>
</encoder>
</appender>
1.3.2 ch.qos.logback.core.FileAppender
? 將日志輸出到具體的磁盤檔案中,可以單獨指定具體的位置,也可以設定日志的輸出格式;
<appender name="FILE" >
<file>e:/log.out</file>
<append>true</append>
<prudent>false</prudent>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
子節點append:新增的日志是否以追加到檔案結尾的方式寫入到log.out檔案中,true為追加,fasle為清空現存檔案寫入;
子節點prudent:日志是否被安全的寫入磁盤檔案,默認為false,如果為true,則效率低下;
1.3.3 ch.qos.logback.core.rolling.RollingFileAppender
? 滾動記錄日志,當符合rollingPolicy節點中設定的條件時,會將現有日志移到新的檔案中去,rollingPolicy節點中可設定的條件為:檔案的大小、時間等;
<appender name="FILE" >
<file>e:/log.out</file>
<append>true</append>
<prudent>false</prudent>
<rollingPolicy >
<fileNamePattern>testLog-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
1.3.4 ch.qos.logback.classic.AsyncAppender
? 異步記錄日志,內部通過使用快取的方式來實作異步列印,將日志列印事件event放入快取中,具體資料結構為BlockingQueue;
<appender name="FILE" >
<file>e:/log.out</file>
<append>true</append>
<prudent>false</prudent>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">
<discardingThreshold>0</discardingThreshold>
<queueSize>512</queueSize>
<appender-ref ref ="FILE"/>
</appender>
? 子節點queueSize:指的是BlockingQueue的佇列容量大小,默認為256個;
? 子節點discardingThreshold:如果BlockingQueue中還剩余20%的容量,那么程式會丟棄TRACE、DEBUG和INFO級別的日志列印事件event,只保留WARN和ERROR級別的,為了保留所有的日志列印事件,可以將該值設定為0,
1.3.5 rollingPolicy
? 日志檔案的滾動策略,與RollingFileAppender搭配使用,當日志檔案發生變動時決定RollingFileAppender的行為,在rollingPolicy節點中有一個class屬性,可選的值為TimeBasedRollingPolicy、FixedWindowRollingPolicy、TriggeringPolicy,其中ch.qos.logback.core.rolling.TimeBasedRollingPolicy表示根據時間制定日志檔案的滾動策略;
<rollingPolicy >
<fileNamePattern>testLog-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
? ch.qos.logback.core.rolling.FixedWindowRollingPolicy表示如果日志檔案大小超過指定范圍時,會根據檔案名拆分成多個檔案;
<rollingPolicy >
<fileNamePattern>tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>4</maxIndex>
</rollingPolicy>
2.組態檔例子
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--設定存盤路徑變數-->
<property name="LOG_HOME" value="https://www.cnblogs.com/bmbi/p/log"/>
<!--控制臺輸出appender-->
<appender name="console" >
<!--設定輸出格式-->
<encoder >
<!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字符寬度%msg:日志訊息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<!--設定編碼-->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--檔案輸出,時間視窗滾動-->
<appender name="timeFileOutput" >
<!--日志名,指定最新的檔案名,其他檔案名使用FileNamePattern -->
<File>${LOG_HOME}/timeFile/out.log</File>
<!--檔案滾動模式-->
<rollingPolicy >
<!--日志檔案輸出的檔案名,可設定檔案型別為gz,開啟檔案壓縮-->
<FileNamePattern>${LOG_HOME}/timeFile/info.%d{yyyy-MM-dd}.%i.log.gz</FileNamePattern>
<!--日志檔案保留天數-->
<MaxHistory>30</MaxHistory>
<!--按大小分割同一天的-->
<timeBasedFileNamingAndTriggeringPolicy >
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!--輸出格式-->
<encoder >
<!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字符寬度%msg:日志訊息,%n是換行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<!--設定編碼-->
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 異步輸出 -->
<appender name="ASYNC-INFO" >
<!-- 不丟失日志.默認的,如果佇列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日志 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默認的佇列的深度,該值會影響性能.默認值為256 -->
<queueSize>256</queueSize>
<!-- 添加附加的appender,最多只能添加一個 -->
<appender-ref ref="timeFileOutput"/>
</appender>
<!--指定基礎的日志輸出級別-->
<root level="INFO">
<!--appender將會添加到這個loger-->
<appender-ref ref="console"/>
<appender-ref ref="timeFileOutput"/>
</root>
</configuration>
3 spring boot 使用logback日志
? SpringBoot工程自帶logback和slf4j的依賴,所以只要在maven依賴中添加了spring-boot-starter-logging即可,logback框架會默認加載classpath下命名為logback-spring或logback的組態檔,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
3.1 簡單使用
? 如果無需復雜的日志配置,執行簡單設定日志列印級別,列印方式可直接在 application.yml 中配置,
logging:
# 配置日志存放路徑,日志檔案名為:spring.log
path: e:/log
file:
# 設定日志檔案大小
max-size: 20MB
level:
# root日志以info級別輸出
root: info
# 此包下所有class以DEBUG級別輸出
com.demo.test: debug
3.2 多環境日志輸出
? Spring Boot 官方推薦優先使用帶有 -spring 的檔案名作為你的日志配置(如使用 logback-spring.xml ,而不是 logback.xml ),命名為 logback-spring.xml 的日志組態檔, spring boot 可以為它添加一些 spring boot 特有的配置項示例如下:
<configuration>
<!-- 測驗環境+開發環境. 多個使用逗號隔開. -->
<springProfile name="test,dev">
<logger name="com.test.demo" level="DEBUG" additivity="false">
<appender-ref ref="console"/>
</logger>
</springProfile>
<!-- 生產環境. -->
<springProfile name="prod">
<logger name="com.test.demo" level="INFO" additivity="false">
<appender-ref ref="timeFileOutput"/>
</logger>
</springProfile>
</configuration>
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195323.html
標籤:Java
