版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第log4j2的異步使用及添加自定義參數(shù)方式目錄log4j2異步使用及添加自定義參數(shù)添加依賴(這里省略了版本號)下面寫一個生產(chǎn)可用的log4j2.xml的模板補充知識自定義日志格式如何在日志中添加自己想傳的參數(shù)?log4j輸入自定義參數(shù)測試代碼如下
log4j2異步使用及添加自定義參數(shù)
關(guān)于log4j2的性能和原理就不贅述了,這篇主要講使用,配置文件解讀,和添加自定義參數(shù),偏應(yīng)用的一篇文章。
相比與其他的日志系統(tǒng),log4j2丟數(shù)據(jù)這種情況少;disruptor技術(shù),在多線程環(huán)境下,性能高于logback等10倍以上;利用jdk1.5并發(fā)的特性,減少了死鎖的發(fā)生;
目前看來,log4j2的性能最突出。
添加依賴(這里省略了版本號)
dependency
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-web/artifactId
exclusions!--去掉springboot默認(rèn)配置--
exclusion
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-logging/artifactId
/exclusion
/exclusions
/dependency
dependency!--引入log4j2依賴--
groupIdorg.springframework.boot/groupId
artifactIdspring-boot-starter-log4j2/artifactId
/dependency
然后再各個項目中添加文件log4j2.xml,在要使用的類上添加@slf4j注解(lombok的),即可使用log對象。
log4j2.0與以往的1.x有一個明顯的不同,其配置文件只能采用.xml,.json或者.jsn。在默認(rèn)情況下,系統(tǒng)選擇configuration文件的優(yōu)先級如下:(classpath為src文件夾)
classpath下名為log4j-test.json或者log4j-test.jsn文件
classpath下名為log4j2-test.xml
classpath下名為log4j.json或者log4j.jsn文件
classpath下名為log4j2.xml
level:日志輸出級別,共有8個級別,按照從低到高為:AllTraceDebugInfoWarnErrorFatalOFF.
下面寫一個生產(chǎn)可用的log4j2.xml的模板
xmlversion="1.0"encoding="UTF-8"
!--Configuration后面的status,這個用于設(shè)置log4j2自身內(nèi)部的信息輸出,可以不設(shè)置,當(dāng)設(shè)置成trace時,你會看到log4j2內(nèi)部各種詳細(xì)輸出--
!--monitorInterval:Log4j能夠自動檢測修改配置文件和重新配置本身,設(shè)置間隔秒數(shù)--
configurationstatus="WARN"
Properties
!--常用變量配置供下文中使用--
propertyname="APP_NAME"項目名稱/property
propertyname="LOGGER_LEVEL"INFO/property
!--日志路徑對應(yīng)服務(wù)器路徑--
propertyname="LOGGER_PATH"/data/logs/property
Propertyname="LOG_HOME"${LOGGER_PATH}/${APP_NAME}/Property
!--文件大小--
Propertyname="FILE_SIZE"10M/Property
!--日志格式--
Propertyname="log_pattern"%d{yyyy-MM-ddHH:mm:ss.SSS}[%thread][%X{traceId}]%-5level%logger{36}-%msg%n/Property
!--日志文件命名格式--
Propertyname="rolling_file_name"-%d{yyyy-MM-dd}.%i.zip/Property
!--日志留存最大文件數(shù)--
Propertyname="rollover_strategy_max"30/Property
Propertyname="LOG_HOME_PROJECT"${LOG_HOME}/${APP_NAME}-project/Property
Propertyname="LOG_HOME_PROJECT_ERROR"${LOG_HOME}/${APP_NAME}-project-error/Property
Propertyname="LOG_HOME_SQL"${LOG_HOME}/${APP_NAME}-sql/Property
/Properties
appenders
!--控制臺打印及格式--
Consolename="Console"target="SYSTEM_OUT"
PatternLayoutpattern="${log_pattern}"/
/Console
!--定義rolling()供下文使用--
RollingRandomAccessFilename="projectRolling"
fileName="${LOG_HOME_PROJECT}.log"
filePattern="${LOG_HOME_PROJECT}${rolling_file_name}"
immediateFlush="false"append="true"
PatternLayout
Pattern${log_pattern}/Pattern
CharsetUTF-8/Charset
/PatternLayout
Policies
!--滾動規(guī)則時間或者文件大小滾動后將按照filePattern命名--
!--interval屬性用來指定多久滾動一次,默認(rèn)是1hour--
TimeBasedTriggeringPolicyinterval="24"/
SizeBasedTriggeringPolicysize="${FILE_SIZE}"/
/Policies
DefaultRolloverStrategymax="${rollover_strategy_max}"/
/RollingRandomAccessFile
RollingRandomAccessFilename="projectErrorRolling"
fileName="${LOG_HOME_PROJECT_ERROR}.log"
filePattern="${LOG_HOME_PROJECT_ERROR}${rolling_file_name}"
immediateFlush="false"append="true"
Filters
!--只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)可以使用多個ThresholdFilter達(dá)到精準(zhǔn)過濾某個級別的日志--
ThresholdFilterlevel="${LOGGER_LEVEL}"onMatch="ACCEPT"onMismatch="DENY"/
/Filters
PatternLayout
Pattern${log_pattern}/Pattern
CharsetUTF-8/Charset
/PatternLayout
Policies
SizeBasedTriggeringPolicysize="${FILE_SIZE}"/
/Policies
DefaultRolloverStrategymax="${rollover_strategy_max}"/
/RollingRandomAccessFile
/RollingRandomAccessFile
RollingRandomAccessFilename="sqlRolling"
fileName="${LOG_HOME_SQL}.log"
filePattern="${LOG_HOME_SQL}${rolling_file_name}"
immediateFlush="false"append="true"
PatternLayout
Pattern${log_pattern}/Pattern
CharsetUTF-8/Charset
/PatternLayout
Policies
SizeBasedTriggeringPolicysize="${FILE_SIZE}"/
/Policies
DefaultRolloverStrategymax="${rollover_strategy_max}"/
/RollingRandomAccessFile
/appenders
!--Logger節(jié)點用來單獨指定日志的形式,比如要為指定包下的class指定不同的日志級別等。--
loggers
!--異步日志區(qū)別于普通使用的loggerroot搭配--
!--name為包名對應(yīng)配置日志輸出等級level--
!--若是additivity設(shè)為false,則子Logger只會在自己的appender里輸出,而不會在父Logger的appender里輸出。--
!--將org.springframework包下的日志打印到Console控制臺,projectRolling文件,projectErrorRolling(error級別單獨一個文件)--
AsyncLoggername="org.springframework"level="${LOGGER_LEVEL}"additivity="false"
appender-refref="Console"/
appender-refref="projectRolling"/
appender-refref="projectErrorRolling"/
/AsyncLogger
AsyncLoggername="com.alibaba.dubbo"level="${LOGGER_LEVEL}"additivity="false"
appender-refref="Console"/
appender-refref="projectRolling"/
appender-refref="projectErrorRolling"/
/AsyncLogger
AsyncLoggername="druid.sql"level="${LOGGER_LEVEL}"additivity="false"
appender-refref="Console"/
appender-refref="sqlRolling"/
/AsyncLogger
AsyncLoggername="org.mybatis"level="${LOGGER_LEVEL}"additivity="false"
appender-refref="Console"/
appender-refref="sqlRolling"/
/AsyncLogger
AsyncLoggername="com.項目包名"level="${LOGGER_LEVEL}"additivity="false"
appender-refref="Console"/
appender-refref="projectRolling"/
appender-refref="projectErrorRolling"/
/AsyncLogger
AsyncRootlevel="${LOGGER_LEVEL}"
appender-refref="Console"/
appender-refref="projectRolling"/
appender-refref="projectErrorRolling"/
/AsyncRoot
/loggers
/configuration
如上配置會產(chǎn)生3個日志文件
項目名稱-project.log
項目名稱-project-error.log
項目名稱-sql.log
補充知識
onMatch和onMismatch都有三個屬性值,分別為Accept、DENY和NEUTRAL
分別介紹這兩個配置項的三個屬性值:
onMatch=“ACCEPT”表示匹配該級別及以上
onMatch=“DENY”表示不匹配該級別及以上
onMatch=“NEUTRAL”表示該級別及以上的,由下一個filter處理,如果當(dāng)前是最后一個,則表示匹配該級別及以上
onMismatch=“ACCEPT”表示匹配該級別以下
onMismatch=“NEUTRAL”表示該級別及以下的,由下一個filter處理,如果當(dāng)前是最后一個,則不匹配該級別以下的
onMismatch=“DENY”表示不匹配該級別以下的
自定義日志格式
%d{HH:mm:ss.SSS}表示輸出到毫秒的時間
%logger{36}簡單理解為類名
%thread輸出當(dāng)前線程名稱
%-5level輸出日志級別,-5表示左對齊并且固定輸出5個字符,如果不足在右邊補0
%logger輸出logger名稱,因為RootLogger沒有名稱,所以沒有輸出
%msg日志文本
%n換行
%X{xxx}xxx為自定義參數(shù)
如何在日志中添加自己想傳的參數(shù)?
定義攔截器(web服務(wù)攔controller,dubbo服務(wù)攔api),每次請求過來,攔住,然后將自定義參數(shù)傳入。至于自定義參數(shù)怎么存,就是另一個問題了。
eg:traceId跟蹤號對應(yīng)log4j2.xml中的%X{traceId}
下面是關(guān)鍵代碼:
publicclassContextFilterimplementsFilter{
@Override
publicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException{
StringtraceId=UUID.randomUUID().toString().replaceAll("-","");
//org.slf4j.MDC
MDC.put(CommonConsts.TRACE_ID_LOG,traceId);//用來給日志文件使用
//org.apache.logging.log4j.ThreadContext
ThreadContext.put(CommonConsts.TRACE_ID_LOG,traceId);//經(jīng)測試,這兩行都可行。
filterChain.doFilter(servletRequest,servletResponse);
最后的日志打印效果如下:
2025-05-2912:04:30.122[http-nio-8080-exec-2][2333333]INFOcom.core.web.filter.ContextFilter-接口調(diào)用時間:245毫秒
log4j輸入自定義參數(shù)
使用log4j、log4j2輸入日志時,有時想追加打印自定義參數(shù)(比如客戶端環(huán)境:手機型號、瀏覽器數(shù)據(jù),request數(shù)據(jù)、用戶數(shù)據(jù)等),以便于快速定位問題所在。
亦或在多線程環(huán)境中,快速定位哪些日志是由同一用戶輸出,便于其他工具進(jìn)行日志分析。
log4j提供了ThreadContext線程上下文類,用于存儲自定義數(shù)據(jù),以便在輸入日志時,包含指定數(shù)據(jù)。
測試代碼如下
packagecom.howtodoinjava.log4j2.examples;
importjava.util.UUID;
importorg.apache.logging.log4j.LogManager;
importorg.apache.logging.log4j.Logge
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026貴州中醫(yī)藥大學(xué)博士后招聘備考題庫及1套完整答案詳解
- 2026貴州醫(yī)科大學(xué)附屬白云醫(yī)院養(yǎng)老護(hù)理員招聘8人備考題庫及答案詳解(奪冠系列)
- 寶寶皮膚護(hù)理與預(yù)防濕疹
- 2025 小學(xué)一年級道德與法治上冊獨自在家不害怕課件
- 2026年工地安全管理標(biāo)準(zhǔn)化建設(shè)
- 遠(yuǎn)程會診護(hù)理的經(jīng)濟(jì)效益
- 職業(yè)醫(yī)學(xué)與工程學(xué)的聯(lián)合防護(hù)模式
- 臨潭事業(yè)編招聘2022年考試模擬試題及答案解析42
- 職業(yè)健康素養(yǎng)對醫(yī)療員工組織承諾的預(yù)測作用
- 職業(yè)健康檔案電子化傳輸過程中的加密技術(shù)應(yīng)用
- 骨密度檢測的臨床意義
- 鉆探原始班報表試行版
- 腸菌移植治療炎癥性腸病專家共識(2025)解讀
- T/CPPC 1032-2021建筑生產(chǎn)資源分供商評價規(guī)范
- 機耕合同協(xié)議書范本簡單
- 送車免責(zé)合同協(xié)議書模板
- 外科學(xué)重癥監(jiān)測治療與復(fù)蘇
- 瓊脂糖-纖維素復(fù)合分離介質(zhì)
- 早產(chǎn)兒家庭參與式護(hù)理
- 2025年招商引資項目可行性研究報告范文
- 常見的鹽(第1課時)-九年級化學(xué)人教版(2024)下冊
評論
0/150
提交評論