在日常的生產中,尤其是在微服務盛行的今天,我們的服務很可能是作為分布式應用上的乙個點,會接受來自不同客戶端的請求,那麼在服務的為每行日誌標記出來自的客戶端呢?本篇我們通過介紹logback的高階用法,來為大家實現。在分布式應用的今天,如何通過日誌把客戶端請求的不同應用的日誌串起來,展示呢
其實很簡單,就是為每個執行緒儲存點私有變數,這個私有變數的值,由我們自定義,用於區分不同的應用。
說到執行緒的私有變數,可能老程式猿,就想到這個類及threadlocal
,關於個類的原始碼分析,小編已經寫過了,這裡就不解釋了,繼續… ,我們今天用到的這個mdc
就是為每個執行緒請求儲存私有變數,然後在輸出日誌的時候列印出來,這樣就能標識出,每一行日誌的**。
logback
框架已經為我們實現了一套常用的請求,今天我們就用,這個來演示。
mdcinsertingservletfilter
我們看一下該類的原始碼分析一下:
就是利用mdc
為每個處理請求的執行緒新增上私有變數。就是如此,
不過我們要注意的是為了讓mdc中的資訊在任何時候都是正確有效的,我們需要在request被處理之前,就講相關資訊放入mdc,再在處理完後,clear掉。
大家看到其實這個類是繼承了filter
就是乙個過濾器,在這裡小編用的是springboot實現的
那麼如何使用呢?
/**
*@package: firebird.logger.config.filter
*@description: 應用配置
*@author: liuxin
*@date: 2017/8/29 下午5:32
*/@component
public
class
@bean
public filterregistrationbean filterregistrationbean()
}
該教程還是參考了我之前寫的日誌錯誤提醒框架,所以注釋部分包括了使用sentry
的部分**,如果對錯誤收集框架感興趣的同學,可以看我的另一篇部落格
springboot整合sentry
conversionword="clr"
converterclass="org.springframework.boot.logging.logback.colorconverter"/>
conversionword="wex"
converterclass="org.springframework.boot.logging.logback.whitespacethrowableproxyconverter"/>
conversionword="wex"
converterclass="org.springframework.boot.logging.logback.extendedwhitespacethrowableproxyconverter"/>
name="console_log_pattern"
value="$) %clr($) %clr($) %clr(--) %clr([%15.15t]) %clr(%-40.40logger) %clr(:) %m%n$}"/>/>
name="mdc_log_pattern"
value="ip:%x -url:%x -method:%x - querystring:%x - device:%x -ips:%x - %m%n ">
property>
name="console"
$pattern>
layout>
level="info">
ref="console"/>
root>
configuration>
可以看到mdc_log_pattern中獲取了從mdc過濾器中的引數,這樣我們就能列印出來了
擴充套件方法如何實現呢? 不積跬步無以至千里,接下來還有要學習如何使用
Logback高階用法
在日常的生產中,尤其是在微服務盛行的今天,我們的服務很可能是作為分布式應用上的乙個點,會接受來自不同客戶端的請求,那麼在服務的為每行日誌標記出來自的客戶端呢?本篇我們通過介紹logback的高階用法,來為大家實現。日誌擴充套件 在分布式應用的今天,如何通過日誌把客戶端請求的不同應用的日誌串起來,展示...
日誌記錄原則以及logback高階用法
1 良好的日誌有助於快速定位問題,但是記錄日誌很容易臃腫膨脹,記錄無用資訊。2 良好的日誌,也是後續進行全鏈路跟蹤的分析介質。3 為自己工作,為自己的系統工作,做自己的老闆,形成正迴圈 打磨當前工作的核心關鍵能力 高效能工作 更多時間打磨自己的系統 更高效能工作 打磨下個層次工作的核心關鍵能力 4 ...
logback高階特性使用
非同步記錄日誌 注意 該功能需要高版本才能支援,如1.0.11。屬性名型別 描述queuesize intblockingqueue的最大容量,預設情況下,大小為256。discardingthreshold int預設情況下,當blockingqueue還有20 容量,他將丟棄trace debu...