Logback簡單使用

Logback 日志框架介紹

正如你所知,開發者擁有大量日志工具可供選擇。本節中,我們將學習一個非常流行的日志庫 —— Logback。它是 Log4j 日志庫的繼任者,基于相似的理念構建。Logback 在同步和異步日志記錄方面都非常快速,并提供了很多實用的功能,因此適用于任何規模的項目。

與直接使用 System.out 打印信息相比,Logback 最大的不同在于它的 每個日志記錄器(Logger)都有一個上下文(context)。這個上下文可以啟用或禁用某些日志消息,還負責創建 Logger 實例并管理它們的層次結構。接下來我們就來詳細了解這些功能。


將 Logback 添加到項目中

安裝 Logback 十分簡單,只需將依賴添加到 Maven 或 Gradle 即可。

要開始使用 Logback,你需要添加 logback-classic 依賴。

Maven 示例:

pom.xml 中添加以下內容:

<dependencies><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency>
</dependencies>

這表示你引入了 Logback 核心的實現包 logback-classic

Gradle 示例:

build.gradle 中添加以下內容:

dependencies {implementation ("ch.qos.logback:logback-classic:1.2.11")
}

這個依賴會自動傳遞引入兩個其他庫:slf4j-apilogback-core

  • SLF4J(Simple Logging Facade for Java)是一個為各種日志庫提供統一接口的“門面”框架。它提供簡單的日志 API,而 Logback 是其原生實現。

  • logback-core 是 Logback 的基礎庫,提供了若干現成的類,例如:

    • ConsoleAppender: 將日志事件輸出到標準控制臺(System.outSystem.err);

    • FileAppender: 將日志事件輸出到文件;

    • RollingFileAppender: 當滿足特定條件時,將日志滾動寫入新文件。

  • logback-classic 還提供了可以將日志發送到外部系統的類,例如:

    • SMTPAppender: 在特定事件發生后將日志通過郵件發送;

    • DBAppender: 將日志存入數據庫表。


基本日志記錄

我們來創建一個名為 Example 的類,并聲明幾個 Logger 對象:

import org.slf4j.Logger
import org.slf4j.LoggerFactoryclass Example {private val LOG_1: Logger = LoggerFactory.getLogger(Example::class.java)private val LOG_2: Logger = LoggerFactory.getLogger("com.example.Example")init {LOG_1.info("Information from LOG_1")LOG_2.warn("Warning from LOG_2")LOG_1.info("Are the loggers the same? {}", LOG_1 === LOG_2)}
}fun main() {Example()
}

代碼解釋:

如你所見,我們并未直接引用 Logback 的任何類,而是使用 SLF4J 提供的接口,SLF4J 再將日志操作交由 Logback 實現。

使用 LoggerFactory.getLogger() 創建 Logger 時,可以傳入類對象或字符串。兩者都作為日志記錄器的名稱。如果同名 Logger 已存在,會復用它;否則會新建一個。

Logger 提供 tracedebuginfowarnerror 等方法來輸出對應級別的日志。

日志默認輸出的內容包括:時間戳、線程名、日志級別、Logger 名稱、日志信息。這些都可以自定義,稍后會介紹配置方式。


日志消息參數化

Logback 支持在日志消息中添加對象或變量。這可以幫助你追蹤出錯位置和原因。

示例:

import org.slf4j.Logger
import org.slf4j.LoggerFactoryclass Example {private val LOG: Logger = LoggerFactory.getLogger(Example::class.java)init {val result = "Any operation"LOG.info("To track the value of a variable. The result is $result")}
}fun main() {Example()
}

這段代碼展示了如何將變量插入到日志中。

此外,我們還可以記錄異常信息:

import org.slf4j.Logger
import org.slf4j.LoggerFactoryclass Example {private val LOG: Logger = LoggerFactory.getLogger(Example::class.java)init {val number = 1val divisor = 0try {val result = number / divisor} catch (e: ArithmeticException) {LOG.error("Something went wrong with divisor $divisor\n$e")}}
}fun main() {Example()
}

說明:

Logback 能提取堆棧跟蹤信息。如果你將異常對象作為日志方法的最后一個參數傳入,即可自動記錄異常詳情,無需在消息中顯式添加占位符。


配置 Logger

Logback 支持使用 XML 或 Groovy 文件進行配置。我們使用 XML 配置文件,名為 logback.xml,應放在資源目錄(resources)中。

控制臺輸出配置:

<configuration><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss} %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="console" /></root>
</configuration>
說明:
  • <appender>:配置日志輸出方式;

    • name:定義 appender 的名稱;

    • class:指定輸出到控制臺的類。

  • <encoder>:設置日志輸出格式;

  • %d:時間戳;

  • %level:日志級別;

  • %logger{36}:日志器名稱(最多 36 個字符);

  • %msg:日志消息;

  • <root>:定義默認根日志器,指定日志級別并綁定 appender

文件輸出配置:

<configuration><appender name="file" class="ch.qos.logback.core.FileAppender"><file>${user.dir}/logs/example.log</file><encoder><pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="file" /></root>
</configuration>

這里我們使用 FileAppender 將日志輸出到 ${user.dir}/logs/example.log。如果該文件不存在,會自動創建。


日志級別配置

Logback 允許為 特定類或包設置不同的日志級別,例如:

class Example {private val LOG = LoggerFactory.getLogger(Example::class.java)fun log() {LOG.warn("WARN level message")LOG.info("INFO level message")}
}class LoggerLevelClass {private val LOG = LoggerFactory.getLogger(LoggerLevelClass::class.java)fun log() {LOG.debug("DEBUG level message")LOG.info("INFO level message")}
}fun main() {Example().log()LoggerLevelClass().log()
}

對應的 XML 配置:

<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender><logger name="com.example" level="warn"/>
<logger name="com.example.LoggerLevelClass" level="info"/><root level="info"><appender-ref ref="console" />
</root>
</configuration>

說明:

  • 每個 logger 只會輸出大于或等于當前設置級別的日志。

  • Logback 使用基于名稱的層級結構,如:

    • com.logback.firstcom.logback.first.second 的父級;

    • com.logback.first.secondcom.logback.first.second.third 的父級。

  • 層級結構的最頂層是 root


總結

在本節中,你學習了 Logback 是做什么的,以及它提供了哪些功能。使用 Logback,你可以清楚地知道程序執行的每一步,還可以根據需求靈活配置日志記錄器、按包或類追蹤操作、快速發現并定位錯誤。

如需進一步了解 Logback 的配置層級和使用技巧,建議查閱官方文檔。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89956.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89956.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89956.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python爬蟲實戰:研究langid.py庫相關技術

一、引言 在當今全球化的網絡環境下,互聯網上的內容呈現出多語言的特點。對于許多自然語言處理 (NLP) 任務,如文本分類、情感分析和信息檢索,準確識別文本的語言是首要步驟。網絡爬蟲作為獲取互聯網內容的重要工具,結合語言識別技術,可以為多語言信息處理提供豐富的數據來…

打車代駕 app 派單接單系統模塊搭建

一、邏輯分析打車代駕 APP 的派單接單系統模塊是整個應用的核心部分&#xff0c;它需要高效、準確地處理訂單分配和司機接單流程&#xff0c;以確保用戶能夠快速得到服務&#xff0c;司機能夠合理地接到訂單。用戶端下單邏輯&#xff1a;用戶打開 APP&#xff0c;輸入出發地、目…

Java Stream API性能優化:原理深度解析與實戰指南

Java Stream API性能優化&#xff1a;原理深度解析與實戰指南 技術背景與應用場景 隨著大數據量處理和高并發場景的普及&#xff0c;傳統的集合遍歷方式在代碼可讀性和性能上逐漸顯現瓶頸。Java 8引入的Stream API&#xff0c;通過聲明式的流式編程極大提升了開發效率和可讀性&…

Nginx配置proxy protocol代理獲取真實ip

Nginx配置proxy protocol 文章目錄Nginx配置proxy protocol前言一、PROXY Protocol協議二、配置方法代理服務器配置http模塊代理??Stream 模塊?代理測試配置是否生效端口檢查測試ip記錄驗證http驗證tcp注意事項和理解誤區應用程序機器配置總結前言 在現代開發中有很多場景需…

什么是商業智能BI數據分析的指標爆炸?

指標爆炸這個詞大家可能都是第一次聽說&#xff0c;指標怎么會爆炸呢&#xff1f;其實這個是我們很多年前在一些商業智能BI項目上總結出來的一種場景或者現象&#xff0c;就是過于的開放給業務人員在BI自助分析過程中創造了很多衍生性的分析指標&#xff0c;結果就造成了前端指…

Spring AI 系列之十八 - ChatModel

之前做個幾個大模型的應用&#xff0c;都是使用Python語言&#xff0c;后來有一個項目使用了Java&#xff0c;并使用了Spring AI框架。隨著Spring AI不斷地完善&#xff0c;最近它發布了1.0正式版&#xff0c;意味著它已經能很好的作為企業級生產環境的使用。對于Java開發者來說…

Linux學習之Linux系統權限

在上一篇的內容中我們學習到了Linux系統命令相關的知識及其相關的擴展內容&#xff0c;本期我們將學習Linux基礎的另一個重要部分&#xff1a;Linux系統權限管理 作者的個人gitee&#xff1a;樓田莉子 (riko-lou-tian) - Gitee.com 目錄 權限概念及必要性 什么是權限 為什么要…

Web3.0 能為你帶來哪些實質性的 改變與突破

如今各種大廠裁員消息層出不窮&#xff0c;今年又添飛書、剪映、微軟、思科... 這有一張網友整理的去年互聯網大廠裁員裁員信息表&#xff1a; 目前國內很多大廠都在裁員&#xff0c;非常現實、且越來越多 35 技術人&#xff0c;正在面臨這樣的問題&#xff0c;那么Web3.0 確實…

doker centos7安裝1

1.什么是doker Docker 是一個開源的應用容器引擎&#xff0c;它允許開發者將應用程序及其依賴項打包到一個可移植的容器中&#xff0c;然后發布到任何支持 Docker 的操作系統上&#xff0c;實現 “一次構建&#xff0c;到處運行”。 容器是一種輕量級的虛擬化技術&#xff0c…

自動化面試題

1、什么是測試套件測試套件是多個測試用例的集合。2、搭建接口自動化框架中&#xff0c;你遇到最大的難點是什么&#xff0c;以及怎么解決的?測試數據動態管理難點:接口依賴動態參數(如Token、訂單ID)&#xff0c;數據無法硬編碼.解決方案:使用關聯提取(如正則提取響應中的Tok…

【Linux】LVS(Linux virual server)環境搭建

一、LVS的運行原理1.1 LVS簡介LVS:Linux Virtual Server&#xff0c;負載調度器&#xff0c;內核集成&#xff0c;章文嵩&#xff0c;阿里的四層SLB(Server LoadBalance)是基于LVSkeepalived實現LVS 官網: http://www.linuxvirtualserver.org/ LVS 相關術語 VS: Virtual Server…

算法競賽備賽——【圖論】求最短路徑——Dijkstra

Dijkstra 用來計算從一個點到其他所有點的最短路徑的算法&#xff0c;是一種單源最短路徑算法。也就是說&#xff0c;只能計算起點只有一個的情況。Dijkstra的時間復雜度是O (|v|^2)&#xff0c;它不能處理存在負邊權的情況。 鄰接矩陣存圖 #include<iostream> using …

影刀 RPA:批量修改 Word 文檔格式,高效便捷省時省力

在日常辦公和文檔處理中&#xff0c;Word 文檔格式的統一和規范是許多企業和個人用戶的重要需求。無論是撰寫報告、制作提案&#xff0c;還是整理資料&#xff0c;都需要確保文檔格式的一致性。然而&#xff0c;手動修改多個 Word 文檔的格式不僅耗時費力&#xff0c;還容易因疏…

GitLab 社區版 10.8.4 安裝、漢化與使用教程

一、GitLab 安裝 GitLab 提供了集成所需軟件的 RPM 包&#xff0c;簡化了安裝流程。我們選擇安裝社區版&#xff08;CE&#xff09;10.8.4&#xff0c;可通過官方網站或國內鏡像源&#xff08;如清華鏡像&#xff09;獲取安裝包。 1. 準備工作 首先創建工具目錄并進入&#…

[硬件電路-64]:模擬器件 -二極管在穩壓電路中的應用

二極管在穩壓電路中的應用主要基于其單向導電性和特定類型二極管&#xff08;如穩壓二極管&#xff09;的電壓穩定特性。以下是詳細解釋&#xff1a;一、普通二極管的穩壓作用&#xff08;有限場景&#xff09;正向導通壓降的利用&#xff1a;原理&#xff1a;普通二極管在正向…

【Linux】重生之從零開始學習運維之Nginx

安裝apt/yum安裝apt imstall nginx yum install nginxRocky源碼編譯安裝基礎編譯環境yum install gcc make gcc-c glibc glibc-devel pcre pcre-devel openssl openssldevel systemd-devel zlib-devel yum install libxml2 libxml2-devel libxslt libxslt-devel php-gd gd-deve…

主流 MQ 的關鍵性能指標

常用消息隊列&#xff08;MQ&#xff09;的“數量級”通常圍繞吞吐量&#xff08;TPS&#xff0c;每秒處理消息數&#xff09;、消息堆積能力、延遲三個核心指標展開&#xff0c;不同MQ因設計目標&#xff08;高吞吐、低延遲、高可靠等&#xff09;不同&#xff0c;數量級差異顯…

[NIPST AI]對抗性機器學習攻擊和緩解的分類和術語

原文link&#xff1a;https://nvlpubs.nist.gov/nistpubs/ai/NIST.AI.100-2e2025.pdf Introduction 人工智能&#xff08;AI&#xff09;系統在過去幾年中持續全球擴展。這些系統正在被眾多國家開發并廣泛部署于各自的經濟體系中&#xff0c;人們在生活的許多領域都獲得了更多使…

[深度學習] 大模型學習3上-模型訓練與微調

在文章大語言模型基礎知識里&#xff0c;模型訓練與微調作為大語言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;應用構建的主要方式被簡要提及&#xff0c;本系列文章將從技術原理、實施流程及應用場景等維度展開深度解析。相關知識的進一步參考見&#x…

Claude Code 啟動提示 Note: Claude Code might not be available in your country. 解決

如下圖所示 主播參考了在別的地方看來的解決方案&#xff08;并非主播不想標注來源&#xff0c;主要是忘記是哪里看來的了&#xff0c;下班就忘記了&#xff0c;懶得找了&#x1f62d;&#xff0c;如果后續找到會補上的&#xff09;。 好了&#xff0c;開始正文&#xff0c;開始…