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