Logback配置檔案這麼寫 TPS提高10倍

2022-10-06 02:54:08 字數 1906 閱讀 4580

1.日誌輸出到檔案並根據level級別將日誌分類儲存到不同檔案

2.通過非同步輸出日誌減少磁碟io提高效能

3.非同步輸出日誌的原理

配置檔案logback-spring.xml

springboot工程自帶logback和slf4j的依賴,所以重點放在編寫配置檔案上,需要引入什麼依賴,日誌依賴衝突統統都不需要我們管了。logback框架會預設載入classpath下命名為logback-spring或logback的配置檔案。將所有日誌都儲存在乙個檔案中檔案大小也隨著應用的執行越來越大並且不好排查問題,正確的做法應該是將error日誌和其他日誌分開,並且不同級別的日誌根據時間段進行記錄儲存。

<?xml version="1.0" encoding="utf-8"?>

www.cppcns.com

[%d] [%c] [%t] [%l] [%-5p] %m%n

error

deny

accept

[%d] [%c] [%t] [%l] [%-5p] %m%n

程式設計客棧;

$//%d.log

30error

[%d] [%c] [%t] [%l] [%-5p] %m%n

$//%d.log

30部分標籤說明

logback 高階特性非同步輸出日誌

之前的日誌配置方式是基於同步的,每次日誌輸出到檔案都會進行一次磁碟io。採用非同步寫日誌的方式而不讓此次寫日誌發生磁碟io,阻塞執行緒從而造成不必要的效能損耗。非同步輸出日誌的方式很簡單,新增乙個基於非同步寫日誌的appender,並指向原先配置的appender即可

0256

0256

非同步輸出日誌效能測試

既然能提高效能的話,必須進行一次測試比對,同步和非同步輸出日誌效能到底能提公升多少倍?

伺服器硬體

測試工具

apache jmeter

同步輸出日誌

執行緒數:100

ramp-up loop(可以理解為啟動執行緒所用時間) :0 可以理解為100個執行緒同時啟用

測試結果

重點關注指標throughput【tps】吞吐量:系統在單位時間內處理請求的數量,在同步輸出日誌中tps為44.2/sec

非同步輸出日誌

tps為497.5/sec,效能提公升了10多倍!!!

非同步日誌輸出原理

從logback框架下的logger.info方法開始追蹤。一路的方法呼叫路徑如下圖所示:

非同步輸出日誌中最關鍵的就是配置檔案中ch.qos.logback.classic``asyncappenderbase``append

protected void append(e eventobject)

}通過佇列情況判斷是否需要丟棄日誌,不丟棄的話將它放到阻塞佇列中,通過檢視**,這個阻塞隊列為arrayblockingqueueu,預設大小為256,可以通過配置檔案進行修改。logger.info(...)到append(...)就結束了,只做了qsqzgfxczw將日誌塞入到阻塞佇列的事,然後繼續執行logger.info(...)下面的語句了。 在asyncappenderbase類中定義了乙個worker執行緒,run方法中的關鍵部分**如下:

e e = parent.blockingqueue.take();

aai.appendlooponappenders(e);

從阻塞佇列中取出乙個日誌,並呼叫appenderattachableimpl類中的appendlooponappenders方法維護乙個append列表。worker執行緒中呼叫方法過程主要如下圖:

最主要的兩個方法就是encode和write方法,前乙個法方會根據配置檔案中encode指定的方式轉化為位元組碼,後乙個方法將轉化成的位元組碼寫入到檔案中去。所以寫檔案是通過新起乙個執行緒去完成的,主線程將日誌扔到阻塞佇列中,然後又去做其他事情了。

最後附:專案完整**

logback基礎配置檔案

logback會依次讀取以下型別配置檔案 logback.groovy logback test.xml logback.xml 如果均不存在會採用預設配置 1.logback元件之間的關係 1.logger 日誌的記錄器,把它關聯到應用的對應的context上後,主要用於存放日誌物件,也可以定義日...

logback配置檔案詳解

true 4relative thread 5level logger msg n 那麼只需要設定rollingpolicy就行了,典型的代表sizeandtimebasedrollingpolicy file 子節點 被寫入的檔名可以是相對,也可以是絕對目錄,如果不存在,則自動建立,沒有預設值 t...

Adobe Air寫配置檔案

寫配置檔案的 如下 1 nativepath 23 var stream filestream new filestream 建立filestream物件 4 stream.open file,filemode.write 使用filestream物件以唯讀方式開啟file物件 56 var con...