logback基本入门
1. logback的定義
Logback是由log4j創始人設計的另一個開源日志組件,官方網站: http://logback.qos.ch。它當前分為下面下個模塊:
logback-core:其它兩個模塊的基礎模塊
logback-classic:它是log4j的一個改良版本,同時它完整實現了slf4j API使你可以很方便地更換成其它日志系統如log4j或JDK14 Logging
logback-access:訪問模塊與Servlet容器集成提供通過Http來訪問日志的功能
2. 核心概念
configuration: logback配置的根元素,所有的配置都基于此元素內
logger: 日志記錄器,命名實體,通過不同命名區分不同的日志記錄器,可以傳遞由 "." 分層的字符串,更加常用的是傳遞類信息
appender: ? 日志輸出目的,通過appender指定日志的輸出目的和輸出方式,可以指定輸出到控制臺、文件、數據庫、遠程機器等位置
encoder: ? ? 日志編碼,用戶將日志事件轉化成可讀的信息,典型場景是將日志轉化成字符串
layout: 布局,用于指定日志輸出的格式,通過一些變量,控制符來控制日志的輸出格式
filter: ? ?過濾器,日志和直接輸出控制臺的區別就是日志可以控制輸出內容和輸出內容格式,filiter控制哪些日志應該輸出,哪些日志不應該輸出
root: ? ?每個配置文件有且只有一個,用戶指定根logger的配置
3. 常用的logback配置項
configuration
屬性:
debug: true / false, 設置true值的時候,第一次啟動日志記錄的時候,會輸出logback的配置信息;
scan:? true / false, 設置true值的時候,結合?scanPeriods 來設置掃描配置文件的間隔時間
例如: 30 seconds, 當掃描發現文件發生變動的時候,會將變動應用到下一次的日志記錄中;
子元素:
logger, appender, layout, filter, root, timestamp等
logger
屬性:
name:? string, 指定該logger的名字,通過”."隔開可以制造logger層級關系,例如 x.y 是 x.y.z的父logger,當x.y.z沒有配置日志級別的時候,會繼承自父logger, 如果additivity沒有設置false的話,還會從父logger繼承appender
level:? TRACE/DEBUG/INFO/WARN/ERROR ALL/OFF, 可以指定日志的級別,低級別會承載高級別日志的輸出,而高級別的不會,例如 DEBUG中不過濾會默認輸出DEBUG及DEBUG以上日志,ERROR只會輸出ERROR,不會輸出它以下級別的日志
子元素:
<appender-ref ref="xxx" /> 指向某個輸出附加器
appender? 日志附加器, 指定當前日志輸出渠道,可以到控制臺、文件,在J2EE應用中,一般是輸出到本地機器file
屬性:
name: string, 當前日志輸出附加器的標識,在一個configuration中應該是唯一的
class: logback提供的輸出附加器類型, 輸出到控制臺、文件、滾動輸出到文件、數據庫、遠程機器等都有對應的appender提供類
子元素:
encoder, 指定日志事件對象編碼類
filter,過濾器,過濾 日志是否需要輸出
root logger的特例,在一個logback上下文中只有一個,就是根記錄器,所有的記錄器都是該記錄器的 子孫記錄器,等同于 <logger name="root" > 其他的記錄器都是 root.xx.xx.xx
屬性:
level: 與logger同
子元素:
appender: 與logger同
property? 屬性值配置
屬性:
name:屬性名稱,用于在配置文件中引用,使用${xx} 方式引用
value:屬性值, 占位符的實際代替值
timestamp 獲取時間戳
屬性:
key:指定的名稱,作用同property的key
datePattern: 時間戳格式化成格式,使用java.text.SimpleDateFormat格式化
4. 常用的appender
主要類圖,引自logback官網(https://logback.qos.ch/manual/appenders.html):
ConsoleAppender 控制臺輸出
屬性名:encoder:日志事件編碼,決定如何轉換日志事件
target:可以是System.out, System.err, 默認是System.out
withJansi: 是否支持ANSI顏色顯示日志,會稍微占用多一點磁盤空間, 默認是false
FileAppender 文件輸出
屬性:encoder: 同上
append:true/false, 當檢測到設置的文件名存在時候,是否需要追加到文件末尾
true會追加,false會先將原有文件內容清空,默認是true
file: 輸出的文件路徑
prudent:嚴謹模式,即使多個jvm同時指定寫入該文件,該啟動該模式也能安全地寫入文件,
true/false, 默認是false, 實現的原理是利用了排它鎖,讓其他需要占用資源的線程等待
寫入文件的時候,我們經常需要講日志每個一個文件的名稱都唯一,那么可以使用timeStamp獲取時間戳來給文件命名保證唯一,適用于應用經常多次運行的情況,如果需要每日自動分割成日志的話, 可以使用下面的RollingFileAppender。
FileAppender生成唯一日志文件名配置:
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/><appender name="FILE" class="ch.qos.logback.core.FileAppender"><!-- use the previously created timestamp to create a uniquelynamed log file --><file>log-${bySecond}.txt</file><encoder><pattern>%logger{35} - %msg%n</pattern></encoder></appender>RollingFileAppender 滾動文件輸出
屬性:file: 同FileAppender
append: 同FileAppender
encoder: 同FileAppender
prudent: 同FileAppender
rollingPolicy: 該配置指定當 滾動事件 觸發的時候,應該執行哪些操作, 本節后面有詳細說明
triggeringPolicy: 該配置指定何時會觸發 滾動時間, 本節后面有詳細說明
TimeBasedRollingPolicy 基于時間的滾動行為
fileNamePattern: string, 文件命名格式,一般會使用 serverName.%d.log 的形式來按照每天來滾動日志文件,%d默認是 yyyy-MM-dd 格式,按照什么單位滾動,是參照%d格式的,例如 %d{yyyy-MM}會讓日志文件按月份滾動,特別的,如果是.gz / .zip 配置該項,那么會將日志文件壓縮后保存(深夜進行壓縮,如果深夜沒有日志工作,一般在00:23 47' 進行)
maxHistory: int,最大日志保留單位,如果?fileNamePattern 配置按照天滾動,這個的單位是天, 如果是月,那這里單位是月,依次類推
totalSizeCap: int,需要maxHistory有配置,配置最大的日志保存量, 例如 5M, 2G 的配置
cleanHistoryOnStart: boolean, 是否在啟動的時候清理歷史日志,默認是false
樣例配置:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>logFile.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- daily rollover --><fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern><!-- keep 30 days' worth of history capped at 3GB total size --><maxHistory>30</maxHistory><totalSizeCap>3GB</totalSizeCap></rollingPolicy><encoder><pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern></encoder></appender>?
Size and time based rolling policy 基于時間和大小的滾動行為
這個觸發行為和??TimeBasedRollingPolicy 有點像,但是他的屬性??fileNamePattern 強制兩個參數 %d 和 %i?,多了一個配置參數:maxFileSize,?所以他的配置文件看起來像是這樣:
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>mylog.txt</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- rollover daily --><fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern><!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --><maxFileSize>100MB</maxFileSize> <maxHistory>60</maxHistory><totalSizeCap>20GB</totalSizeCap></rollingPolicy><encoder><pattern>%msg%n</pattern></encoder></appender>當時間條件未達到,但是單文件最大大小已經達到的時候,會自動講%i 從 0 開始疊加滾動,它產生的日志可能是 mylog-2018-08-19-0.txt,?mylog-2018-08-19-1.txt,?mylog-2018-08-19-2.txt 這樣子,其他的和?TimeBasedRollingPolicy 一致;
FixedWindowRollingPolicy 滾動窗口輸出
該輸出需要和滾動觸發配合使用, 屬性有:minIndex,?maxIndex,?fileNamePattern,fileNamePattern需要帶上 %i 參數,使得可以生成唯一的文件名, 當達到maxIndex上限之后,文件不會再發生滾動,會一直寫入基礎日志文件中,它的配置文件看起來就像這樣:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>test.log</file><rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"><fileNamePattern>tests.%i.log.zip</fileNamePattern><minIndex>1</minIndex><maxIndex>3</maxIndex></rollingPolicy><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"><maxFileSize>5MB</maxFileSize></triggeringPolicy><encoder><pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern></encoder></appender>SizeBasedTriggeringPolicy 基于文件大小的觸發滾動
屬性:maxFileSize:最大文件大小,當日志文件達到該大小后,就會觸發滾動事件;
?
(后續更新)
5. Encoders
6. Layouts
7. Filters
?
轉載于:https://www.cnblogs.com/zhuangmingnan/p/9503053.html
總結
以上是生活随笔為你收集整理的logback基本入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小白路程之----初学React语法栈之
- 下一篇: solaris系统普通用户无法执行su命