最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一篇文章帶你徹底搞懂Java日志與Logback

 更新時間:2026年04月19日 10:05:42   作者:Scigar  
Logback是一個開源的日志框架,Logback旨在提供比log4j更高效、更靈活的日志解決方案,這篇文章主要介紹了Java日志與Logback的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

一、為什么需要日志?

在開發(fā)和運維一個系統(tǒng)時,我們經常會有這樣的需求:

  • 想清楚地知道系統(tǒng)運行了哪些步驟
  • 某個時間點系統(tǒng)發(fā)生了什么錯誤
  • 用戶反饋“系統(tǒng)卡了/掛了”,希望能還原當時的現(xiàn)場

這時候就離不開:日志(Log)

很多初學者一開始就是在代碼里到處寫 System.out.println(...) 來“打日志”。 這種方式雖然簡單,但有幾個明顯弊端:

1. 輸出語句的弊端

  • 信息只能顯示在控制臺,關掉控制臺就什么都沒了
  • 無法方便地記錄到文件、數據庫等其他位置
  • 想“停用日志”或者“少打印點日志”,就得改代碼、重新打包、重新上線

對于一個真正的線上系統(tǒng),這些都是難以接受的。

2. 日志技術的優(yōu)勢

專業(yè)的日志框架能幫我們解決上述問題,它具備這些能力:

  • 可以將系統(tǒng)執(zhí)行信息選擇性地記錄到:
    • 控制臺
    • 文件
    • 數據庫(一般不推薦大量打到 DB,中間件會偶爾這么做)
  • 可以通過配置文件來控制:
    • 哪些日志記錄
    • 記錄到哪里
    • 以什么格式記錄
    • 用什么級別(debug/info/warn/error)
  • 可以通過“開關(級別設置)”來決定是否記錄日志,而無需修改源代碼

一句話:日志框架讓“日志”變成一種可配置、可控制的基礎設施。

二、日志體系:接口與實現(xiàn)

Java 生態(tài)中的日志并不是一個單一庫,而是一個分層體系,大致可以理解為兩類:

  1. 日志規(guī)范接口(Facade,門面)
  2. 日志實現(xiàn)框架(具體干活的)

1. 日志規(guī)范接口

常見的日志接口:

  • Commons Logging (簡稱:JCL)
  • Simple Logging Facade for Java (簡稱:slf4j)

它們本質上是一組接口,定義了像 info()、debug()、error() 等方法。 這些接口并不關心日志具體如何輸出、存在哪里,而是提供給各類日志實現(xiàn)框架一個統(tǒng)一的規(guī)范。

2. 日志實現(xiàn)框架

一些典型的日志實現(xiàn)框架:

  • Log4j
  • Logback
  • Log4j2 等

這些框架才是真正干活的,負責把日志按要求寫到控制臺、文件、網絡等地方。

因為對 Commons Logging 的接口不滿意,有人搞了 SLF4J;
因為對 Log4j 的性能不滿意,有人搞了 Logback。
Java 日志體系就是這樣一步步演進出來的。

在現(xiàn)代項目中,常見組合是:

  • 代碼依賴 SLF4J 接口
  • 底層使用 Logback 作為實現(xiàn)

這樣你寫的代碼只依賴接口,以后如果要更換日志實現(xiàn)(從 Logback 換成 Log4j2 等),只要改依賴和配置,而不用改業(yè)務代碼。

三、Logback 概述

1. 什么是 Logback?

Logback是一個高性能的日志框架:

  • 由 Log4j 作者開發(fā),是 Log4j 的“進化版”
  • 基于 SLF4J 日志規(guī)范實現(xiàn)
  • 性能和功能上普遍優(yōu)于傳統(tǒng)的 Log4j

很多現(xiàn)代框架(例如 Spring Boot)默認都使用 Logback 作為日志實現(xiàn)。

2. Logback

Logback 主要分為三個模塊:

  1. logback-core

    • 核心模塊
    • 為其他模塊提供基礎功能
    • 使用 Logback 必須有它
  2. logback-classic

    • 完整實現(xiàn)了 SLF4J API 的模塊
    • 一般我們日常使用的就是這個模塊配合 logback-core
  3. logback-access

    • 與 Tomcat、Jetty 等 Servlet 容器集成
    • 用于記錄 HTTP 訪問日志

一般 Java 應用最常用的是:logback-core + logback-classic。

四、Logback 快速入門

1. 引入依賴

以 Maven 項目為例,只要引入 SLF4J 接口和 Logback 實現(xiàn)(很多場景 Spring Boot 已經幫你引好了):

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>最新穩(wěn)定版</version>
</dependency>

logback-classic 會自動依賴 logback-core 和 slf4j-api,通常不用你再額外引。

2. 基本使用方式

在代碼中使用時,永遠面向 SLF4J 接口編程

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Demo {
    // 獲取日志對象
    private static final Logger log = LoggerFactory.getLogger(Demo.class);
    public static void main(String[] args) {
        log.trace("這是 trace 級別日志");
        log.debug("這是 debug 級別日志");
        log.info("這是 info 級別日志");
        log.warn("這是 warn 級別日志");
        log.error("這是 error 級別日志");
    }
}

看起來和 System.out.println() 很像,但本質完全不同:

  • 輸出位置可以是:控制臺 / 文件 / 甚至遠程日志收集系統(tǒng)
  • 輸出格式、是否輸出、輸出多少,全由配置文件控制
  • 不需要改業(yè)務代碼就可以調整日志策略

五、Logback 配置:輸出位置與格式

Logback 的配置通常通過一個 XML 文件完成,默認文件名為:

  • logback.xml(最常見)
  • 或 logback-spring.xml

1. 配置大體結構

典型結構包含:

  • <appender>:定義“輸出到哪里、以什么格式輸出”
  • <logger>:定義某個包/類的日志級別與使用哪些 appender
  • <root>:根日志器,所有日志最終都會歸到這里

2. 輸出位置(Appender)

常見的輸出目的地:

  • 控制臺:ConsoleAppender
  • 文件:FileAppender
  • 滾動文件(按大小/日期拆分日志文件):RollingFileAppender

舉個簡單示例:

<configuration>
    <!-- 控制臺輸出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level [%thread] %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 文件輸出 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/app.log</file>
        <!-- 這里可以配置按日期/大小滾動等 -->
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 根日志器,設置級別和使用的 appender -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

你在筆記中提到:

“logback可以存在文件中,具體文件可以存在哪里,xml文件里面可以設置。”

就是通過 <file>、滾動策略等配置來確定日志保存路徑和拆分策略。

六、日志級別詳解

項目上線后,常見的兩種需求:

  • 線上環(huán)境只記錄重要的錯誤信息,不要太多無用日志
  • 某個問題需要排查時,暫時想多打一點日志看看細節(jié)

這就要靠日志級別來精細控制輸出。

1. 常見日志級別(從低到高)

一般從低到高是:

  1. TRACE:最詳細的日志,一般只在調試極其復雜問題時使用
  2. DEBUG:調試信息,開發(fā)環(huán)境常用
  3. INFO:常規(guī)業(yè)務運行信息,如重要步驟、關鍵結果
  4. WARN:警告信息,可能有問題但不影響系統(tǒng)繼續(xù)跑
  5. ERROR:錯誤信息,功能失敗或系統(tǒng)異常

在配置中給某個 logger 設定了某個級別之后,只會輸出該級別及以上的日志。

例如:

<root level="INFO">
    ...
</root>

表示:

  • TRACE、DEBUG 級別日志不會輸出
  • INFO、、 會輸出WARNERROR

2. 通過級別控制日志開關

“可以通過設置日志的輸出級別來控制哪些日志信息輸出或者不輸出。”

好處是顯而易見的:

  • 開發(fā)環(huán)境:可以把級別設為 DEBUG 或 TRACE,看到更多細節(jié)
  • 測試環(huán)境:設為 INFO,既能看業(yè)務流程又不會太吵
  • 生產環(huán)境:通常設為 WARN 或 ERROR,只關注潛在問題和錯誤

最重要的是,這一切都是通過配置文件修改完成,無需改任何業(yè)務代碼。

總結

到此這篇關于Java日志與Logback的文章就介紹到這了,更多相關Java日志與Logback內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 網關Gateway過濾器的使用詳解

    網關Gateway過濾器的使用詳解

    Gateway網關的過濾器分為兩種,一種是局部過濾器,一種是全局過濾器,過濾器就是過濾一些請求,在這里,全局過濾器的作用是處理一切進入網關的請求和微服務響應,與GatewayFilter的作用一樣,本文給大家介紹網關Gateway過濾器的使用,感興趣的朋友一起看看吧
    2022-07-07
  • JDK與Dubbo中的SPI詳細介紹

    JDK與Dubbo中的SPI詳細介紹

    這篇文章主要介紹了JDK中的SPI與Dubbo中的SPI,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-09-09
  • Java之ThreadPoolExecutor類詳解

    Java之ThreadPoolExecutor類詳解

    這篇文章主要介紹了Java之ThreadPoolExecutor類詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • Java函數式編程(九):Comparator

    Java函數式編程(九):Comparator

    這篇文章主要介紹了Java函數式編程(九):Comparator,本文是系列文章的第9篇,其它文章請參閱本文底部的相關文章,需要的朋友可以參考下
    2014-09-09
  • SpringBoot服務器配置全過程

    SpringBoot服務器配置全過程

    Spring?Boot默認請求頭最大長度為8KB,可以通過配置文件修改,默認最大連接數取決于所用服務器(如Tomcat、Jetty或Undertow),例如Tomcat默認最大連接數為8192,最大工作線程數為200,最大等待隊列長度為100,Jetty和Undertow也有不同的默認配置
    2025-11-11
  • Apache Commons fileUpload實現(xiàn)文件上傳之一

    Apache Commons fileUpload實現(xiàn)文件上傳之一

    這篇文章主要介紹了Apache Commons fileUpload實現(xiàn)文件上傳之一的相關資料,需要的朋友可以參考下
    2016-03-03
  • Java二分查找算法實例詳解

    Java二分查找算法實例詳解

    在本篇文章里小編給大家分享總結的是一篇關于Java二分查找算法實例詳解內容,對此有興趣的朋友們可以跟著學習下。
    2022-11-11
  • Springboot之如何統(tǒng)計代碼執(zhí)行耗時時間

    Springboot之如何統(tǒng)計代碼執(zhí)行耗時時間

    這篇文章主要介紹了Springboot之如何統(tǒng)計代碼執(zhí)行耗時時間問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • java 非對稱加密算法RSA實現(xiàn)詳解

    java 非對稱加密算法RSA實現(xiàn)詳解

    這篇文章主要介紹了java 非對稱加密算法RSA實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • JAVA JDK8 List分組的實現(xiàn)和用法

    JAVA JDK8 List分組的實現(xiàn)和用法

    今天小編就為大家分享一篇關于JAVA JDK8 List分組的實現(xiàn)和用法,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評論

富民县| 宜川县| 武宣县| 分宜县| 平顺县| 铁岭市| 华容县| 子洲县| 芜湖县| 南江县| 镇巴县| 百色市| 利津县| 荥阳市| 木兰县| 宁夏| 庆阳市| 五原县| 独山县| 江川县| 垫江县| 常山县| 道孚县| 公安县| 邢台市| 渝北区| 崇仁县| 鹤壁市| 本溪| 阳新县| 天祝| 上虞市| 西平县| 西林县| 元氏县| 泰来县| 修武县| 双流县| 通海县| 宁晋县| 浑源县|