slf4j MDC是個好東西

2021-10-12 10:25:09 字數 1756 閱讀 2448

同時,使用者也可利用mdc將一些執行時的上下文資料列印出來。

什麼意思呢?

常規情況下,寫打日誌的**時,一般都是log.info、log.warn、log.error將想要打的日誌進行拼裝和格式化,打到日誌輸出中。mdc能幹什麼呢?能在不改動log.***打日誌**的情況下,在最終的日誌輸出的指定位置列印額外的資訊。而這,就是靠mdc進行傳遞實現的。

在日誌中自動列印框架/元件方面的資訊

例如:

一般配合aop / filter / interceptor使用

@around

(value =

"execution(* com.xx.xx.facade.impl.*.*(..))"

, argnames=

"pjp"

)public object validator

(proceedingjoinpoint pjp)

throws throwable

catch

(throwable e)

finally

}

**通過aop記錄了每次請求的traceid,並使用變數"mdc_trace_id"記錄到mdc內。

在日誌配置檔案裡需要設定變數才能將"mdc_trace_id"輸出到日誌檔案中。以logback配置檔案為例,看日誌第10行%x:

"all" class=

>

$/logs/all.log

"ch.qos.logback.core.rolling.timebasedrollingpolicy"

>

<

!-- daily rollover -->

$/logs/all.%d.log

<

!-- keep 30 days' worth of history -->

30"utf-8"

>

%d[%thread] %-5level %logger - traceid:[%x

] - %msg%n

1、如果你的系統早已上線,突然有一天老闆說我們增加一些使用者資料到日誌裡分析一下。如果沒有mdc,你不得不在n個工程裡翻天覆地的「傳引數+改打日誌的**」,你肯定很崩潰,不懂技術的老闆也很無奈(就多加幾點資訊,這麼大動靜嗎?)。而mdc能讓你很從容的完成此事。

2、使**簡潔、日誌風格統

一、變更靈活。

此處以 logback中的實現為例。為了方便講解,我們只分析mdc的put()方法:

public

class

mdcif

(mdcadapter == null)

mdcadapter.

put(key, val)

;}

mdc的put()方法利用mdcadapter實現。

既然一般都是結合aop使用mdc,那麼還是要考慮內部方法實現時的支撐情況,例如:多執行緒

下面看一下logback中mdcadapter的實現logbackmdcadapter

public

final

class

logbackmdcadapter

implements

mdcadapter

else

else}}

}

CCProxy是個好東西

我在之前的部落格裡提到了用teamviewer ccproxy做內網穿透,當時只是簡單提了一下,因為發現這種方式網速比較慢。今天又用到了它,雖然慢點,但是總比沒的用好,哈哈哈。不得不感嘆ccproxy是個好東西,小巧靈活,好多次用學校的ip下 都靠它的,設定也比較簡單。上網本質上和 一樣,只要內網機...

槍油是個好東西

冷風扇失效。而且噪音比較大。本想更換乙個原裝的,問了維修點 原裝的要300元。還 是自己動手豐衣足食吧,將風扇拆下來,清理到灰塵後,將散熱片和風扇拆開,撕開風 扇後的標籤,滴上2滴槍油,重新裝好。測試 自己寫了乙個程式,死迴圈內做mac操作。目的占用cpu資源,讓風扇盡快開啟。沒有一會風扇開啟,起先...

Markdown是個好東西

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...