Logback的使用及如何配置

2022-09-28 03:06:13 字數 4081 閱讀 9812

日誌在專案開發過程的作用不言而喻,專案上線後,我們需要根據日誌檔案定位問題發生的位置以及產生的原因。以前在專案開發中,已經有前人在工程中配置過日誌,所以完全不需要自己再進行日誌的配置。這次在新的專案中自己來配置日誌時,還是遇到了一些波折,下面慢慢道來。

目前,在springboot工程體系中,使用較多的日誌元件是slf4j、logback以及log4j2。而slf4j本身只是乙個介面類,具體的實現還是由logback或log4j2來完成的。由於springboot自身就整合了logback,預設使用的日誌元件是logback,logback的體系結構具有足夠的通用性,可以在不同的場景下使用。因此,在我們的drs工程中,使用了logback進行日誌的列印。

目前,logback包含三個部分:logback-core, logback-classic, logback-access。 logback-core: 為其他兩個模組奠定了基礎 logback-classic: 可以被同化為log4j的乙個顯著程式設計客棧改進的版本,此外, logback-classic實現了slf4japi,因此您可以方便地在logback和其他日誌框架(如log4j或log4j)之間來回切換j**a.util.logging檔案 logback-access: 整合了servlet容器(如tomcat和jetty),以提供http訪問日誌功能。

如果使用的是springboot是2.4版本及以上,則不需要另外引入logback-core, logback-classic, logback-access和slf2j-api的依賴包的。

首先,看一下我們在drs工程中使用的logback配置檔案:

<?xml version="1.0" encoding="utf-8"?>

$$/drs-server-debug.log

$/drs-server-debug.%d.log30$

debug

accept

deny

">

$/drs-server-info.log

$/drs-server-info.%d.log

30www.cppcns.comgt;

$info

accept

deny

$/drs-server-warn.log

$/drs-server-warn.%d.log

30www.cppcns.comr>

$warn

accept

deny

$/drs-server-error.log

$/drs-server-error.%d.log30$

error

accept

deny

說明:

屬性說明

log.path

定義日誌檔案的輸出路徑

log.pattern

定義日誌檔案輸出格式

appender

定義了日誌的輸出檔案,日誌檔案保留時長,使用何種模式輸出,以及過濾規則。在上述檔案中,分別針對debug、info、warn和error日誌進行了定義了四個appender

logger

用來設定某乙個類或某個包的日誌列印級別。在上述配置中,我們將drs工程的日誌輸出級別定義為info,那麼,如果只想列印出drs工程中的日誌,則只需將列印級別level設定為warn

root

是乙個根logger,root下可以包含零個或多個appender。如果乙個appender沒有在root下引入,則不會生成對應的日誌檔案

針對以上述配置中的格式進行說明:

%d [%thread] %-5level %logger - [%method,%line] - %msg%n

字段說明

%d用於輸出日誌事件的日期,其中%d也可以替換成%date,該設定對應下圖中的紅色標記部分

[%thread]

輸出對應的執行緒名。在上面的截圖中可以看到,輸出執行緒是主線程main

%-5level

輸出日誌級別,其中-5表示如果記錄器名稱長度小於5個字元,則右鍵填充空格

%logger

輸出日誌事件起源處記錄器的名稱。其中20表示輸出記錄的名稱長度限制,超過這個長度,記錄器名將會進行縮寫。但是,記錄器名稱中最右邊的段從不縮寫,即使其長度比「長度」選項長。其他段可以縮短到最多乙個字元,但永遠不會刪除

[%method,%line]

程式設計客棧 %method 輸出發出日誌記錄請求的方法名稱,%method也可替換成%m; %line——輸出發出日誌記錄請求的行號,%line也可替換成%l

%msg

輸出應用程式提供的與日誌事件關聯的訊息。其中%msg也可替換成%m或%message

%n輸出平台相關的行分隔符字元

appender子類包含filter、encoder、consoleappender、fileappender、以及rollingfileappender。其類圖關係如下所示。

顧名思義目標檔案由file選項指定。如果該檔案已存在,則根據append屬性的值將其追加或截斷。rollingfileappender 擴充套件了fileappender,具有滾動更新日誌檔案的功能。

類名encoder

immediateflush

target

withjansi

append

file

prudent

rollingpolicy

triggeringpolicy

outputstreamappender√√

consoleappender√√

√√

fileappender√√

--√√

√rollingfileappender√√

--√√

√√

√outputstreamappender 這個類提供了其他附加程式構建的基本服務。該類包含兩個屬性設定: encoder—— 確定日誌寫入的編碼格式。 immediateflush——布林值,預設為true, 立即重新整理輸出流可確保立即寫出日誌事件,並且在應用程式退出而未正確關閉附加器時不會丟失這些事件。 另一方面,將此屬性設定為「false」可能會使日誌吞吐量增加四倍。同樣,如果immediateflush設定為「false」,並且應用程式退出時appender未正確關閉,則尚未寫入磁碟的日誌事件可能會丟失。

consoleappender 將日誌附加在控制台上,其包含三個屬性: encoder——略 target—— system.out或者 system.err字串值之一 預設目標是 system.out withjansi——布林值,預設false。 將withjansi設定為true將啟用jansi庫,該庫為windows機器上的ansi顏色**提供支援。在windows主機上,如果此屬性設定為true,則應將**:org.fusesource.jansi:jansi:1.17「在類路徑上進行設定。請注意,基於unix的作業系統(如linux和macosx)預設支援ansi顏色**。一般我們很少用到,使用預設值即可。

fileappender 它將日誌事件附加到檔案中,其包含四個屬性: append——布林值,預設為true, 表示事件附加在現有檔案的末尾。如果append為false,則任何現有檔案都將被截斷。 encoder——略 file—— 要寫入的檔案的名稱, 如果檔案不存在,則建立該檔案。 如果檔案的父目錄不存在,fileappender將自動建立它,包括任何必要但不存在的父目錄。 prudent——布林值,預設值為false。如果設定為true, fileappender將安全地寫入指定的檔案,即使存在執行在不同jvm(可能執行在不同主機上)中的其他fileappender例項。

rollingfileappender 擴充套件了fileappender,具有滾動更新日誌檔案的功能,其包含以下幾個屬性: file——略 append——略 encoder——略 rollingpolicy—— 此選項是在發生滾動時指定rollingfileappender行為的元件,包含sizeandtimebasedrollingpolicy、fixedwindowrollingpolicy、timebasedrollingpolicy。在上述配置中我們使用的是最為廣泛的timebasedrollingpolicy。 triggeringpolicy—— 此選項是通知rollingfileappender何時啟用滾動更新過程的元件 prudent——布林值,當為true時,不支援fixedwindowrollingpolicy。

logback的配置和使用

logback是由log4j創始人設計的又乙個開源日誌元件。logback當前分成三個模組 logback core,logback classic和logback access。logback core是其它兩個模組的基礎模組。logback classic是log4j的乙個 改良版本。此外log...

日誌元件logback的介紹及配置使用方法 二

四 logback的預設配置 如果配置檔案 logback test.xml 和logback.xml 都不存在,那麼 logback 預設地會呼叫 basicconfigurator 建立乙個最小化配置。最小化配置由乙個關聯到根 logger 的組成。輸出用模式為 d thread 5level ...

關於logBack配置日誌檔案及編碼配置的問題

記錄下使用logback中遇到的問題,方便以後檢視 目前網上能搜到的關於輸出到日誌檔案的大小設定有如下兩種 若rollingpolicy用sizeandtimebasedrollingpolicy,直接複製下面的triggeringpolicy會報錯,說無法建立triggeringpolicy co...