Logback日誌配置的簡單使用

来源:https://www.cnblogs.com/xuwujing/archive/2018/01/25/8353543.html
-Advertisement-
Play Games

Logback介紹 Logback是由log4j創始人設計的又一個開源日誌組件。logback當前分成三個模塊:logback core,logback classic和logback access。logback core是其它兩個模塊的基礎模塊。logback classic是log4j的一個 ...


Logback介紹

Logback是由log4j創始人設計的又一個開源日誌組件。logback當前分成三個模塊:logback-core,logback- classic和logback-access。logback-core是其它兩個模塊的基礎模塊。logback-classic是log4j的一個 改良版本。此外logback-classic完整實現SLF4J API使你可以很方便地更換成其它日誌系統如log4j或JDK14 Logging。logback-access訪問模塊與Servlet容器集成提供通過Http來訪問日誌的功能。

Logback的優點

  1. 執行速度快,初始化記憶體載入小;
  2. 原生實現了 SLF4J API,不需要進行轉換;
  3. 配置簡單,並可以適應多種環境;
  4. 可以定時的刪除過期日誌;
  5. 更為強大的過濾器,不必因更改日誌級別而產生大量的日誌;
  6. 可以從 IO 錯誤中進行恢復;
  7. ....
    關於logback的優點還有很多,這裡我就不一一列舉了。詳細的可以查看官方的Api文檔。
    地址:https://logback.qos.ch/documentation.html

Logback的配置說明

關於這塊的配置說明,我就簡單的列舉一些比較常用配置來進行說明。如果還想瞭解更多,請看官方的文檔說明。

Logback的層級說明

簡單的層級結構,實際有更多,僅供參考。

configuration  
    root
    logger                     
    property                        
    appender 
        layout 
        rollingPolicy
           Pattern
           fileNamePattern
           maxFileSize
           maxHistory
           totalSizeCap

具體說明

configuration 根節點, 一般有三個屬性,分別是scan、scanPeriod和debug。

  • scan:是否自動載入,預設為true。
  • scanPeriod:監聽修改時間間隔,預設一分鐘。
  • debug: 是否查看logback運行狀態,預設true。

那麼我們要使用這個的話,可以進行如下配置:

<configuration  scan="true" scanPeriod="30 seconds" debug="true">
...
</configuration>

root 和logger 子節點,用於指定輸入的日誌級別。

  • root :這個是指定主日誌的級別。
  • logger :這個是指定自定義日誌的級別。

說明:root 指定的日誌級別就是用類進行輸出的日誌,例如:

  private static Logger LOG = LoggerFactory.getLogger(logbackTest.class);

logger 指定的日誌級別是自定義的級別,例如:

private static Logger LOG2 = LoggerFactory.getLogger("oneInfo");

他們的用法如下:

<logger name="oneInfo" level="DEBUG" additivity="false">
       <appender-ref ref="ONE_INFO" />
    </logger>
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE" />
    </root>

說明二: level 是日誌輸出的級別,additivity表示是否在控制台列印該日誌。

property 子節點,一般用來定義變數值。有兩個屬性name和value。類似Java中Map的key和value。

  • name: 變數的名稱
  • value: 變數的值

用法如下:

<property name="LOG_HOME" value="logs/pcm"/>

說明:value指定的文件路徑,會在項目同級目錄下自動生成,無需手動創建。

appender 子節點,負責寫日誌的組件。有兩個屬性,name和class。

  • name: 自定義名稱。
  • class:對應自定義名稱的全限定名,就是使用何種方式進行日誌的輸出。

這個非常重要,也可以說是logback的核心吧。簡單的用法如下:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
</appender>

說明:定義一個STDOUT名稱,在控制台進行輸出。

layout和Pattern 這兩個一般是一起使用的。

  • layout:格式化日誌信息;
  • Pattern :layout 子節點,定義輸出信息的格式;

簡單的用法如下:

<layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
            </Pattern>
</layout>

說明:Pattern裡面格式的%d表示輸出的時間格式,%thread 表示輸出的線程名稱,%-5level 表示字元寬度,%msg 表示輸出的信息,%n表示換行。

rollingPolicy、fileNamePattern、maxFileSize、 maxHistory和totalSizeCap 這些一般用於對日誌進行滾動,也就是日誌切割管理之類的。

  • rollingPolicy: 決定日誌滾動行為,一般用於日誌切割。
  • fileNamePattern:必要的節點,一般用於指定日誌的文件的路徑以及生成格式。
  • maxFileSize:單個日誌文件最大值,達到之後就進行切割。
  • maxHistory:日誌文件最多保留的天數,也就是過期時間。
  • totalSizeCap : 日誌文件總體的最大值,達到之後就不再產生日誌。

簡單的用法如下:

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>31</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
    </appender>

說明:這段的配置意義是,每天產生一個日誌文件,如果超出了10M,日誌就進行切割,並且在日誌文件名稱上加一,日誌文件最多保持31天,日誌文件總共最大為10G。

Logback使用說明

在對logback日誌的配置文件進行了簡單的說明之後,那我們來簡單的使用logback吧。
logback.xml 使用需要依賴三個 jar 包,分別是 slf4j-api,logback-core,logback-classic。
mavan配置如下:

<dependency>
     <groupId>org.slf4j</groupId>
     <artifactId>slf4j-api</artifactId>
     <version>1.7.25</version>
    </dependency>
    
    
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.2.3</version>
    </dependency>

成功在maven添加依賴包之後,我們寫個簡單的demo來測試下吧。
定義三個log日誌,一個主log,兩個自定義log。
整體配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration  scan="true" scanPeriod="30 seconds" debug="true">
    <property name="LOG_HOME" value="logs/pcm"/>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
            </Pattern>
        </layout>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>31</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
            </Pattern>
        </layout>
    </appender>
    
    <appender name="ONE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/oneInfo/%d{yyyy-MM-dd}/oneInfo.%i.txt</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>31</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
            </Pattern>
        </layout>
    </appender>
    
    <appender name="TWO_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOG_HOME}/twoInfo/%d{yyyy-MM-dd}/twoInfo.%i.txt</fileNamePattern>
            <maxFileSize>10MB</maxFileSize>
            <maxHistory>31</maxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
            </Pattern>
        </layout>
    </appender>
    
    <logger name="oneInfo" level="DEBUG" additivity="false">
       <appender-ref ref="ONE_INFO" />
    </logger>
    <logger name="twoInfo" level="WARN" additivity="true">
       <appender-ref ref="TWO_INFO" />
    </logger>
    
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="FILE" />
    </root>

</configuration>

然後分別在控制台輸出和文件中進行輸出。
該java的代碼示例如下:

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

/**
 * 
* Title: logbackTest
* Description:
* logback日誌測試 
* Version:1.0.0  
* @author pancm
* @date 2018年1月24日
 */
public class logbackTest {
    private static Logger LOG = LoggerFactory.getLogger(logbackTest.class);
    private static Logger LOG2 = LoggerFactory.getLogger("oneInfo");
    private static Logger LOG3 = LoggerFactory.getLogger("twoInfo");
    
    public static void main(String[] args) {
        test();
    }
    
    private static void test(){

        LOG.debug("主程式的debug");
        LOG.info("主程式的info");
        LOG.warn("主程式的warn");
        LOG.error("主程式的error");
        
        LOG2.debug("oneInfo的debug");
        LOG2.info("oneInfo的info");
        LOG2.warn("oneInfo的warn");
        LOG2.error("oneInfo的error");
        
        LOG3.debug("twoInfo的debug");
        LOG3.info("twoInfo的info");
        LOG3.warn("twoInfo的warn");
        LOG3.error("twoInfo的error");
    }

輸出結果如下:

這裡寫圖片描述

日誌的生成目錄:
這裡寫圖片描述

輸出結果的說明:

  • LOG: 因為設置列印的級別是info,所以debug級別的不會列印 。
  • LOG2: 因為自定義配置設定的是 additivity="false" 不在控制台列印。 所以一條都不會列印,但是debug級別以上的日誌可以在logs/pcm/oneInfo中查看。
  • LOG3: 因為自定義配置設定的是 additivity="true" 可以在控制台列印。所以會列印兩條warn級別的日誌,日誌也可以在logs/pcm/oneInfo中查看。

其它

參考:
https://logback.qos.ch/documentation.html
https://www.cnblogs.com/warking/p/5710303.html

到此,本文的logback日誌簡單講解結束,謝謝閱讀!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Java DBCP連接池設置以及說明 ...
  • Markdown 語法快速入門 [TOC](博客園Markdown引擎暫不支持) 標題 第一級標題 第二級標題 第六級標題 強調 斜體字 : _斜體字_: 加粗 : __斜體字__: 列表 無序列表: 有序列表: 任務列表: [ ]未完成任務 [x] 已完成任務 插入鏈接及圖片 插入鏈接: Eg. ...
  • QT5 TCP網路通訊 伺服器與客戶端建立連接listen() - connectToHost(); 觸發newPendingConnect信號 實時數據通訊write(); read(); 觸發readyRead信號 通訊主要使用的類: QTcpServer Class QTcpServer類提供 ...
  • 問題: 給定一個n*n的棋盤,棋盤中有一些位置不能放皇後。現在要向棋盤中放入n個黑皇後和n個白皇後,使任意的兩個黑皇後都不在同一行、同一列或同一條對角線上,任意的 兩個白皇後都不在同一行、同一列或同一條對角線上。問總共有多少種放法?n小於等於8。 輸入格式 輸入的第一行為一個整數n,表示棋盤的大小。 ...
  • 多註冊中心,一般用不到,但是某些情況下的確能解決不少問題,可以將某些dubbo服務註冊到2套dubbo系統中,實現服務在2套系統間的共用. 網上的配置說明很多,但包括dubbo官方說明文檔都是以xml文件配置方式舉例. 如想採用javaconfig的配置方式,則只需要對provider中的配置做適當 ...
  • session淺析 1.對於會話技術的理解 web會話技術包含Session和Cookie,會話技術是瀏覽器端與伺服器端的交互技術,拿cookie技術來說,客戶端在請求伺服器端的時候,如果有業務需要,伺服器會設置響應頭的key值與value值,在響應的時候帶給瀏覽器端,然後瀏覽器端在符合path條件 ...
  • 靜態頁面分為兩種,一種為jsp,另一種為html。 先看jsp的 在登陸的form表單中添加添加type為checkbox的input標簽 為該checkbox增加點擊事件 在後臺登錄方法中根據remember的值判斷是否設置Cookie 在頁面載入完後,獲取Cookie,並存入pageContex ...
  • import re # 正則表達式,用於提取數據 import requests # 下載網頁源代碼 ''' 安裝requests模塊:pip install requests 參考文檔:https://www.cnblogs.com/jamespan23/p/5526311.html ''' fo... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...