欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Logback設置日志級別

 更新時間:2021年07月29日 14:23:41   作者:SonOfWind0311  
這篇文章主要介紹了使用Logback設置日志級別的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Logback設置日志級別

使用Logback設置日志的設置方式現(xiàn)在已經有很多文章說明,本文重點說明不同設置方式的區(qū)別和用途。首先列舉常用的三種方式,接下來說明其區(qū)別。

appender中的LevelFilter:

級別過濾器,根據日志級別進行過濾。如果日志級別等于配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日志

 <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">   
   <filter class="ch.qos.logback.classic.filter.LevelFilter">   
     <level>INFO</level>   
     <onMatch>ACCEPT</onMatch>   
     <onMismatch>DENY</onMismatch>   
   </filter>   
   ...
 </appender>   

appender中的ThresholdFilter:

臨界值過濾器,過濾掉低于指定臨界值的日志。當日志級別等于或高于臨界值時,過濾器返回NEUTRAL。跟LevelFilter的區(qū)別在于一個是區(qū)間,一個是單點。

 <appender name="CONSOLE"   class="ch.qos.logback.core.ConsoleAppender">   
   <!-- 過濾掉 TRACE 和 DEBUG 級別的日志-->   
   <filter class="ch.qos.logback.classic.filter.ThresholdFilter">   
     <level>INFO</level>   
   </filter>   
   ...
 </appender>   

logger中的Level:

用來設置指定名稱的日志級別,如果不設定,那么采用父類的level,最頂級的父類是ROOT,一般用來調整指定類的日志級別,其規(guī)則為等于或者高于設定level的日志才可能輸出(注意是可能,因為還要看appender的設置)

<logger level="TRACE" name="com.test.pk1"/>

那么以上幾種應該如何使用,如何生效?

如何生效:可以這樣理解日志的處理流水線:

先判斷l(xiāng)ogger的level,如果不滿足直接丟棄不打印,如果滿足進入下一步

1、找到關聯(lián)的appender,根據appender的filter對日志進行過濾

2、如何應用:通過logger設置日志的level比較常見,也比較容易理解。既然已經能夠通過logger的level控制日志按照級別輸出,appender的filter什么時候用?

主要應用的場景是:按照日志級別保存不同的文件。比如等于或高于error級別保存到log_error.log文件,等于或高于warn級別保存到log_warn.log文件(深究一下:為什么要按照級別保存不同的文件?方便發(fā)現(xiàn)問題,因為實際應用中DEBUG級別的日志量往往很大,通過日志分級別保存,可以直接看error級別的日志,快速發(fā)現(xiàn)問題)。

Example:

<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="WarnLogFile">
        ...
        <file>${LOGS_DIR}/log-warn.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>WARN</level>
        </filter>
        ...
    </appender>
    
    <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="InfoLogFile">
        ...
        <file>${LOGS_DIR}/log-info.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        ...
    </appender>
    
    <appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="DebugLogFile">
        ...
        <file>${LOGS_DIR}/log-debug.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        ...
    </appender>

Logback日志-分日志等級別輸出

一 logback的介紹

Logback是由log4j創(chuàng)始人設計的另一個開源日志組件,官方網站: http://logback.qos.ch。它當前分為下面下個模塊:

  • logback-core:其它兩個模塊的基礎模塊
  • logback-classic:它是log4j的一個改良版本,同時它完整實現(xiàn)了slf4j API使你可以很方便地更換成其它日志系統(tǒng)如log4j或JDK14 Logging
  • logback-access:訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能

二 logback的配置介紹

Logger、appender及l(fā)ayout

Logger作為日志的記錄器,把它關聯(lián)到應用的對應的context上后,主要用于存放日志對象,也可以定義日志類型、級別。

Appender主要用于指定日志輸出的目的地,目的地可以是控制臺、文件、遠程套接字服務器、 MySQL、PostreSQL、 Oracle和其他數據庫、 JMS和遠程UNIX Syslog守護進程等。

Layout 負責把事件轉換成字符串,格式化的日志信息的輸出。

logger context

各個logger 都被關聯(lián)到一個 LoggerContext,LoggerContext負責制造logger,也負責以樹結構排列各logger。其他所有l(wèi)ogger也通過org.slf4j.LoggerFactory 類的靜態(tài)方法getLogger取得。 getLogger方法以 logger名稱為參數。用同一名字調用LoggerFactory.getLogger 方法所得到的永遠都是同一個logger對象的引用。

有效級別及級別的繼承

Logger 可以被分配級別。級別包括:TRACE、DEBUG、INFO、WARN 和 ERROR,定義于ch.qos.logback.classic.Level類。如果 logger沒有被分配級別,那么它將從有被分配級別的最近的祖先那里繼承級別。root logger 默認級別是 DEBUG。

打印方法與基本的選擇規(guī)則

打印方法決定記錄請求的級別。例如,如果 L 是一個 logger 實例,那么,語句 L.info("…")是一條級別為 INFO的記錄語句。記錄請求的級別在高于或等于其 logger 的有效級別時被稱為被啟用,否則,稱為被禁用。記錄請求級別為 p,其 logger的有效級別為 q,只有則當 p>=q時,該請求才會被執(zhí)行。

該規(guī)則是 logback 的核心。級別排序為: TRACE < DEBUG < INFO < WARN < ERROR

分日志等級別輸出

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--定義日志文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
    <property name="LOG_HOME" value="log"/>
    <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%X{TRACE_ID}] %-5level %logger{20}[%L] - %msg%n"/>
    <!-- 控制臺輸出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
            <pattern>${PATTERN}</pattern>
            <!-- 設置輸出字符集編碼 -->
            <charset>UTF-8</charset>  
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件輸出的文件名-->
            <FileNamePattern>${LOG_HOME}/log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天數-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化輸出:%d表示日期,%thread表示線程名,%-5level:級別從左顯示5個字符寬度%msg:日志消息,%n是換行符-->
            <pattern>${PATTERN}</pattern>
            <!-- 設置輸出字符集編碼 -->
            <charset>UTF-8</charset>  
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>50MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
    <!-- ERROR 文件輸出日志 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_HOME}/log_error.log</File>
        <append>true</append>
        <prudent>false</prudent>
        <!-- 日志文件rolling策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/log_error_%d{yyyy-MM-dd}.log.gz</FileNamePattern>
            <!-- 日志在磁盤上保留天數 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <!-- 過濾器,只ACCEPT接收ERROR級別的日志,其它日志級別都DENY拒絕 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 日志輸出格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${PATTERN}</pattern>
        </encoder>
    </appender>
    <!-- INFO 文件輸出日志 -->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_HOME}/log_info.log</File>
        <append>true</append>
        <prudent>false</prudent>
        <!-- 日志文件rolling策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/log_info_%d{yyyy-MM-dd}.log.gz</FileNamePattern>
            <!-- 日志在磁盤上保留天數 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <!-- 過濾器,只ACCEPT接收ERROR級別的日志,其它日志級別都DENY拒絕 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 日志輸出格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${PATTERN}</pattern>
        </encoder>
    </appender>
    <!-- DEBUG 文件輸出日志 -->
    <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_HOME}/log_debug.log</File>
        <append>true</append>
        <prudent>false</prudent>
        <!-- 日志文件rolling策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/log_debug_%d{yyyy-MM-dd}.log.gz</FileNamePattern>
            <!-- 日志在磁盤上保留天數 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <!-- 過濾器,只ACCEPT接收ERROR級別的日志,其它日志級別都DENY拒絕 -->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 日志輸出格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${PATTERN}</pattern>
        </encoder>
    </appender>
    <!-- 把日志異步輸出到磁盤文件中,避免每次都進行磁盤IO操作 -->
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <discardingThreshold>0</discardingThreshold>
        <queueSize>10000</queueSize>
        <appender-ref ref="FILE" />
    </appender>
    <!-- 日志輸出級別 -->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
<!--        <appender-ref ref="ASYNC"/>-->
<!--        <appender-ref ref="ERROR_FILE"/>-->
<!--        <appender-ref ref="INFO_FILE"/>-->
<!--        <appender-ref ref="DEBUG_FILE"/>-->
    </root>
</configuration>

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java中有界隊列的飽和策略(reject policy)原理解析

    Java中有界隊列的飽和策略(reject policy)原理解析

    這篇文章主要介紹了Java中有界隊列的飽和策略(reject policy)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • 詳解mybatis foreach collection示例

    詳解mybatis foreach collection示例

    這篇文章主要介紹了詳解mybatis foreach collection的相關資料,需要的朋友可以參考下
    2017-10-10
  • Java線性結構中的雙向鏈表實現(xiàn)原理

    Java線性結構中的雙向鏈表實現(xiàn)原理

    這篇文章將給大家詳細講解雙向鏈表的內容,尤其是會通過代碼來進行鏈表的操作,文中的代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2023-07-07
  • Springmvc如何返回xml及json格式數據

    Springmvc如何返回xml及json格式數據

    這篇文章主要介紹了Springmvc如何返回xml及json格式數據,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Java8 接口默認方法和靜態(tài)方法

    Java8 接口默認方法和靜態(tài)方法

    這篇文章主要介紹了Java8 接口默認方法和靜態(tài)方法,在默認接口中使用關鍵字default聲明并提供具體實現(xiàn),而且該方法不需要添加public關鍵字就可以公開調用,甚至你可以在其實現(xiàn)類中覆寫,帶著對默認接口的方法和小編一起探索下面文章內容的靜態(tài)方法吧
    2021-10-10
  • Java 解析Markdown文檔格式的兩種方式

    Java 解析Markdown文檔格式的兩種方式

    CommonMark和Flexmark是兩種用于解析Markdown文檔的Java庫,CommonMark提供了一種簡潔和一致的Markdown格式語法規(guī)范,但不支持目錄解析,而Flexmark是一個基于CommonMark的擴展庫,不僅遵循了CommonMark規(guī)范,還提供了更多靈活的API和擴展功能
    2024-10-10
  • AQS加鎖機制Synchronized相似點詳解

    AQS加鎖機制Synchronized相似點詳解

    這篇文章主要為大家介紹了AQS加鎖機制Synchronized相似點詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • SpringBoot項目調優(yōu)及垃圾回收器的比較詳解

    SpringBoot項目調優(yōu)及垃圾回收器的比較詳解

    這篇文章主要介紹了SpringBoot項目調優(yōu)及垃圾回收器的比較詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • java實現(xiàn)簡單學生成績檔案管理系統(tǒng)

    java實現(xiàn)簡單學生成績檔案管理系統(tǒng)

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單學生成績檔案管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 深入剖析Java之String字符串

    深入剖析Java之String字符串

    這篇文章主要為大家詳細介紹了Java之String字符串,重新帶大家認識String字符串,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論