1. 程式人生 > >logback最實用配置與元件詳解

logback最實用配置與元件詳解

完整示例

首先展示一個完整的示例以供參考。

<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="10 seconds" debug="false">

    <contextName>logback</contextName>

    <timestamp key="ts" datePattern="yyyyMMdd'T'HHmmss"/>
    <property name="log.path" value="F:/logs/logback" />
    <property name="log.bak.path" value="F:/logs/logback/bak" />
    <property name="charset" value="UTF-8" />
    <property name="log.pattern.one" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
    <property name="log.pattern.two" value="[${ts}] [%5level] %logger{0} - %msg%n"/>

    <!--輸出到控制檯-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <Pattern>${log.pattern.two}</Pattern>
            <charset>${charset}</charset>
        </encoder>
    </appender>

    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/context-info.log</file>
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <Pattern>${log.pattern.one}</Pattern>
            <charset>${charset}</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.bak.path}/info/context-info-%d{yyyyMMddHHmm}-%i.zip</fileNamePattern>
            <maxHistory>10</maxHistory>
            <maxFileSize>1KB</maxFileSize>
            <totalSizeCap>1MB</totalSizeCap>
        </rollingPolicy>
    </appender>


    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/warn.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${log.bak.path}/warn/warn-%i.zip</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>5</maxIndex>
        </rollingPolicy>
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>1KB</maxFileSize>
        </triggeringPolicy>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <Pattern>${log.pattern.one}</Pattern>
            <charset>${charset}</charset>
        </encoder>
    </appender>

    <appender name="ERROR" class="ch.qos.logback.core.FileAppender">
        <file>${log.path}/error.log</file>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <Pattern>${log.pattern.one}</Pattern>
            <charset>${charset}</charset>
        </encoder>
    </appender>

<!--    <logger name="org.springframework.web" level="info"/>-->
<!--    <logger name="org.curitis.test" level="info" addtivity="true">-->
<!--        <appender-ref ref="INFO"/>-->
<!--    </logger>-->

    <root level="info">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="INFO" />
        <appender-ref ref="WARN" />
        <appender-ref ref="ERROR" />
    </root>

</configuration>

測試程式碼:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogTest {

    private static final Logger logger = LoggerFactory.getLogger(LogTest.class);

    public static void main(String[] args) {
        while (true) {
            logger.info("info");
            logger.warn("warn");
            logger.error("error");
        }
    }
}

日誌目錄

日誌級別

日誌級別從低到高分為:

  1. TRACE
  2. DEBUG
  3. INFO
  4. WARN
  5. ERROR
  6. FATAL

configuration

scan:當此屬性設定為true時,配置檔案如果發生改變,將會被重新載入,預設值為true

scanPeriod:設定監測配置檔案是否有修改的時間間隔,如果沒有給出時間單位,預設單位是毫秒。當scan為true時,此屬性生效。預設的時間間隔為1分鐘。

debug:當此屬性設定為true時,將打印出logback內部日誌資訊,實時檢視logback執行狀態。預設值為false。

property

配置屬性,以便於在其他配置使用,一些公用的配置例如,日誌輸出格式,日誌檔案路徑等就可以配置為property。

<timestamp key="ts" datePattern="yyyyMMdd'T'HHmmss"/>
<property name="log.path" value="F:/logs/logback/" />
<property name="log.bak.path" value="F:/logs/bak/" />
<property name="charset" value="UTF-8" />
<property name="log.pattern.one" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
<property name="log.pattern.two" value="[${ts}] [%5level] %logger{0} - %msg%n"/>

appender

我願意吧appender翻譯為輸出器,appender主要有3中:

  1. ConsoleAppender
  2. RollingFileAppender
  3. FileAppender

ConsoleAppender是輸出到控制檯,RollingFileAppender是滾動日誌輸出器,一般用於輸出需要儲存一段時間的日誌,FileAppender一般是資料量比較小特別關注的日誌輸出器。

encoder

每一個appender都需要一個encoder,主要用於指定輸出日誌格式和編碼。

<encoder>
    <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</Pattern>
    <charset>UTF-8</charset>
</encoder>

過濾器(filter)

Appender可以配置多個過濾器,過濾器主要有3中:

  1. ThresholdFilter
  2. LevelFilter
  3. EvaluatorFilter

ThresholdFilter

臨界值過濾器,Threshold是閾值,臨界值的意思,表示過濾掉低於指定臨界值的日誌。

當日志級別等於或高於臨界值時,過濾器返回NEUTRAL,當日志級別低於臨界值時,日誌會被拒絕。

例如,過濾掉所有低於INFO級別的日誌:

<filter class="ch.qos.logback.classic.filter.ThresholdFilter">   
    <level>INFO</level>   
</filter>   

過濾器,執行一個過濾器會有返回個列舉值,即DENY,NEUTRAL,ACCEPT其中之一。返回DENY,日誌將立即被拋棄不再經過其他過濾器;返回NEUTRAL,有序列表裡的下個過濾器過接著處理日誌;返回ACCEPT,日誌會被立即處理,不再經過剩餘過濾器。

過濾器被新增到<Appender> 中,為<Appender> 新增一個或多個過濾器後,可以用任意條件對日誌進行過濾。<Appender> 有多個過濾器時,按照配置順序執行。

LevelFilter

級別過濾器,level是級別的意思,會根據日誌級別進行過濾。

如果日誌級別等於配置級別,過濾器會根據onMath和onMismatch的配置接收或拒絕日誌,onMath和onMismatch可以配置下面3個值:

  1. DENY:日誌將立即被拋棄不再經過其他過濾器
  2. NEUTRAL:下個過濾器過接著處理日誌
  3. ACCEPT:日誌會被立即處理,不再經過剩餘過濾器
<filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>WARN</level>
    <onMatch>ACCEPT</onMatch>
    <onMismatch>DENY</onMismatch>
</filter>

通過LevelFilter可以將指定級別的日誌輸出到指定檔案。

EvaluatorFilter

表示式過濾器,評估、鑑別日誌是否符合指定條件。需要額外的兩個jar包:

  1. commons-compiler.jar
  2. janino.jar

表示式過濾器很強大,但是很少用,它可以根據event、message、hrowable、logger、level、loggerContext、marker等過濾。

<filter class="ch.qos.logback.core.filter.EvaluatorFilter">
  <evaluator>
    <expression>return message.contains("connection fail");</expression>
  </evaluator>
  <OnMatch>ACCEPT</OnMatch>
  <OnMismatch>DENY</OnMismatch>
</filter>

上面的示例是隻接收日誌中包含connection fail的日誌,還可以根據throwable過濾出指定異常的的日誌資訊,輸出到指定檔案,但是一般沒有必要。

Policy

Policy主要有3個:

  1. SizeBasedTriggeringPolicy
  2. FixedWindowRollingPolicy
  3. SizeBasedTriggeringPolicy

FixedWindowRollingPolicy一般和SizeBasedTriggeringPolicy組合使用。

SizeAndTimeBasedRollingPolicy

<appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/context-info.log</file>
        <append>true</append>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <encoder>
            <Pattern>${log.pattern.one}</Pattern>
            <charset>${charset}</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${log.bak.path}/info/context-info-%d{yyyyMMddHHmm}-%i.zip</fileNamePattern>
            <maxHistory>10</maxHistory>
            <maxFileSize>1KB</maxFileSize>
            <totalSizeCap>1MB</totalSizeCap>
        </rollingPolicy>
    </appender>

SizeAndTimeBasedRollingPolicy需要注意的地方是fileNamePattern的配置。 既然是時間和大小,那麼就要設定時間的策略,時間策略就是根據fileNamePattern的%d{yyyyMMddHHmm}部分來的。 %d{yyyyMMddHHmm}就是每分鐘滾動一次,生成一個新的檔案 %d{yyyyMMddHH}就是每一小時滾動一次,生成一個新的檔案 %d{yyyyMMdd}就是每天滾動一次,生成一個新的檔案

%i部分是指定大小的,因為不知道日誌有多少,所以是%i,實際上根據maxFileSize來生成,一個檔案大小達到maxFileSize就生成一個新檔案。

例如上面的配置就是${log.path}/context-info.log檔案一分鐘內就會至少會生成一個檔案,${log.bak.path}/info/context-info-201909281200-0.zip。

如果一分鐘之內context-info.log超過1kb就會生成多個。

時間大小滾動日誌

上面的maxFileSize是為了測試設定很小,實際可以設定大一些,例如,如果日誌要存入hdfs就可以把maxFileSize設定為128M,這樣剛好是一個hdfs的block。

FixedWindowRollingPolicy與SizeBasedTriggeringPolicy

<appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${log.path}/warn.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>${log.bak.path}/warn/warn-%i.zip</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>5</maxIndex>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>1KB</maxFileSize>
    </triggeringPolicy>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>WARN</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <Pattern>${log.pattern.one}</Pattern>
        <charset>${charset}</charset>
    </encoder>
</appender>

固定視窗策略,最重要的配置是maxIndex,就是最大下標。結合SizeBasedTriggeringPolicy,達到指定檔案大小就會生成一個新的壓縮檔案。

例如,上面的配置就會最多生成5個壓縮檔案,每當warn.log達到1kb的時候就會生成一個warn-i.zip的壓縮檔案。

壓縮檔案最多5個,會迴圈覆蓋。

固定視窗大小滾動日誌

logger

給指定的包或者類配置日誌輸出

<logger name="org.springframework.web" level="info"/>
<logger name="org.curitis.test" level="info" addtivity="false">
    <appender-ref ref="INFO"/>
</logger>

logger預設使用的日誌輸出地方是控制檯,可以通過appender-ref修改。level指定輸出級別,addtivity設定為false表示,不在其他日誌輸出器中輸出了。

root

配置日誌輸出器

<root level="info">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="INFO" />
    <appender-ref ref="WARN" />
    <appender-ref ref="ERROR" />
</root>

level指定公共預設最低輸出級別,例如如果設定為WARN,則低於WARN的資訊都不會輸出

其他

包含其他配置檔案,可以是一些固定的配置,例如指定庫的日誌輸出配置檔案。

<include resource="classpath:logback-base.xml" />

指定環境環境:

<springProfile name="dev">
    <logger name="org.springframework" level="WARN"/>
</springProfile>

彩色日誌: org.springframework.boot.logging.logback.ColorConverter org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter

相關推薦

logback實用配置元件

完整示例 首先展示一個完整的示例以供參考。 <?xml version="1.0" encoding=&

1105_nginx入門、安裝配置使用

nginx入門、安裝配置與使用詳解 本文內容: 1. nginx 簡介 2. nginx 安裝配置 3. nginx使用 4.nginx配置location總結及rewrite規則寫法   一、Nginx 的三大功能   1.HTTP伺服器 Nginx

nginx入門安裝配置使用

本文內容:  1. nginx 簡介  2. nginx 安裝配置  3. nginx使用 4.nginx配置location總結及rewrite規則寫法 一、Nginx 的三大功能   1.HTTP伺服器 Nginx是一個

Log4j的配置使用

作者:李天煒 Log4j是Apache的一個開放原始碼專案,通過使用Log4j,我們可以控制日誌資訊輸送的目的地是控制檯、檔案、GUI元件、甚至是套介面伺服器、NT的事件記錄器、UNIX Syslog守護程序等;我們也可以控制每一條日誌的輸出格式;通

Tomcat系列之伺服器的安裝配置以及各元件

Tomcat系列之伺服器的安裝與配置以及各元件詳解 大綱 一、前言 二、安裝與配置Tomcat 三、Tomcat 目錄的結構 四、Tomcat 配置檔案 注,本文的測試的作業系統為CentOS 6.4 x86_64,軟體版本為jdk-7u40、apache

傳奇添加地圖配置參數

指定 守護 添加 經驗 nor mod rand connect 參數詳解 課程主題:(地圖添加與配置參數詳細講解) 【相關工具】 1.D:\mirserver\Mir200\Envir\MapInfo.txt 地圖配置文件 2.D:\mirserver\Mir200\M

nagios 服務端客戶端監控安裝詳細配置,各配置文件

this sql 引入 apache2 cpu load fine 宕機 pri require nagios 安裝與部署—————— 1、安裝前準備(1)創建nagios用戶和用戶組 [root@localhost ~]#groupadd nagios

FastDFS分布式文件系統&Nginx負載均衡小環境安裝配置[超級

nbsp strong figure 分割 不能訪問 org 事先 zlib 編輯 1、背景 FastDFS 是一款開源的、分布式文件系統(Distributed File System),由淘寶開發平臺部資深架構師余慶開發。該開源項目的主頁是 http://code.go

notecase的下載安裝(全網詳細)(圖文

博客 交流 微信公眾號 str ID 程序輸入點 個人學習 無法 slc   不多說,直接上幹貨!   notecase是什麽?   一個按照樹狀結構來組織文檔內容的筆記管理程序 1、雙擊

JEESITE快速開發平臺(三)項目文件結構配置文件

lib http 說明 dep java ee 訪問時間 參數 windows -c 1. 文件結構 1.0. 源碼目錄 src/main/Java com.thinkgem.jeesite Jeesite平臺目錄 ├ common 公共模

vsftpd 配置:chroot_local_userchroot_list_enable

哪些 受限 假設 全局 上下 clas ftp cells cas 轉自:https://blog.csdn.net/bluishglc/article/details/42398811 很多情況下,我們希望限制ftp用戶只能在其主目錄下(root dir)下活動,不允

docker如何快速的方式建立映象並在建立時安裝配置好jdk()(第五篇)共五篇

Dockerfile製作映象步驟 在根目錄下建立dockerfile資料夾 mkdir dockfile 在資料夾下建立Dockerfile檔案 touch Dockerfile 編輯Dockerfile檔案 vim Dockerfile 檔案內容如下: #版本資訊 FROM centos

史上全面的Spring Boot配置文件

\n 系統環境 dfa 文件比較 打包 body XML contex 字符 Spring Boot在工作中是用到的越來越廣泛了,簡單方便,有了它,效率提高不知道多少倍。Spring Boot配置文件對Spring Boot來說就是入門和基礎,經常會用到,所以寫下做個總結以

《Android群英傳》學習筆記之Android控制元件架構自定義控制元件

一、Android控制元件架構: 控制元件大致分為兩類:ViewGroup控制元件與View控制元件。View是繪製在螢幕上的使用者能與之互動的一個物件。而ViewGroup則是一個用於存放其他Vi

ubuntu16.04叢集之間配置SSH免密碼登陸原理

環境 vmware14.1虛擬機器中三臺ubuntu16.04 ip地址對映關係:如下 127.0.0.1 localhost 192.168.184.131 vm-01 192.168.184.132 vm-02 192.168.184.133

UE4移動元件(一)——移動框架實現原理

前言 關於UE4的移動元件,我寫了一篇非常詳細的分析文件。由於篇幅比較大,我將其拆分成三個部分。分別從移動框架與實現原理,移動的網路同步,移動元件的優化與改造三個方面來寫。這三篇文件中難免有問題和漏洞,所以我也會在發現問題時及時更新和修改,也希望大家能給出一些

網路大流-ISAP演算法模板

ISAP演算法 ISAP(Improved Shortest Augumenting Path)演算法是改進版的SAP演算法,如果對效率要求很高的時候,可以用該演算法。 (1)概述:演算法基於這樣的一個事實:每次增廣之後,任意結點到匯點(在殘餘網路中)的最短距離都不會

spring-boot-starter-logging logback常用配置之標籤

logback 常用配置詳解(二) <appender> <appender>: <appender>是<configuration>的子節點,是負責寫日誌的元件。 <appender>有兩個必要

全網詳細的一個超級好用的命令列工具【Cmder】的安裝之後的一些配置(圖文

    不多說,直接上乾貨! 1、修改命令提示符λ為$    首先,我們看到    進入解壓後的cmder的目錄,進入vendor,開啟init.bat檔案。   修改第15行的程式碼 @prompt $E[1;32;40m$P$S

Windows 7作業系統下Apache的安裝配置(圖文

This is the main Apache HTTP server configuration file. It contains the # configuration directives that give the server its instructions. # See <UR