logback高級特性使用-異步記錄日志

注意:該功能需要高版本才能支持,如1.0.11。

AsyncAppender,異步記錄日志。

工作原理:
當Logging Event進入AsyncAppender后,AsyncAppender會調用appender方法,append方法中在將event填入Buffer(這里選用的數據結構為BlockingQueue)中前,會先判斷當前buffer的容量以及丟棄日志特性是否開啟,當消費能力不如生產能力時,AsyncAppender會超出Buffer容量的Logging Event的級別,進行丟棄,作為消費速度一旦跟不上生產速度,中轉buffer的溢出處理的一種方案。AsyncAppender有個線程類Worker,它是一個簡單的線程類,是AsyncAppender的后臺線程,所要做的工作是:從buffer中取出event交給對應的appender進行后面的日志推送。

從上面的描述中可以看出,AsyncAppender并不處理日志,只是將日志緩沖到一個BlockingQueue里面去,并在內部創建一個工作線程從隊列頭部獲取日志,之后將獲取的日志循環記錄到附加的其他appender上去,從而達到不阻塞主線程的效果。因此AsynAppender僅僅充當事件轉發器,必須引用另一個appender來做事。

在使用AsyncAppender的時候,有些選項還是要注意的。由于使用了BlockingQueue來緩存日志,因此就會出現隊列滿的情況。正如上面原理中所說的,在這種情況下,AsyncAppender會做出一些處理:默認情況下,如果隊列80%已滿,AsyncAppender將丟棄TRACE、DEBUG和INFO級別的event,從這點就可以看出,該策略有一個驚人的對event丟失的代價性能的影響。另外其他的一些選項信息,也會對性能產生影響,下面列出常用的幾個屬性配置信息:

屬性名類型描述
queueSizeintBlockingQueue的最大容量,默認情況下,大小為256。
discardingThresholdint默認情況下,當BlockingQueue還有20%容量,他將丟棄TRACE、DEBUG和INFO級別的event,只保留WARN和ERROR級別的event。為了保持所有的events,設置該值為0。
includeCallerDataboolean提取調用者數據的代價是相當昂貴的。為了提升性能,默認情況下,當event被加入到queue時,event關聯的調用者數據不會被提取。默認情況下,只有"cheap"的數據,如線程名。

?


?

默認情況下,event queue配置最大容量為256個events。如果隊列被填滿,應用程序線程被阻止記錄新的events,直到工作線程有機會來轉發一個或多個events。因此隊列深度需要根據業務場景進行相應的測試,做出相應的更改,以達到較好的性能。

下面給出一個使用的配置示例:

<appender name="FILE" class= "ch.qos.logback.core.rolling.RollingFileAppender"><!-- 按天來回滾,如果需要按小時來回滾,則設置為{yyyy-MM-dd_HH} --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>/opt/log/test.%d{yyyy-MM-dd}.log</fileNamePattern><!-- 如果按天來回滾,則最大保存時間為1天,1天之前的都將被清理掉 --><maxHistory>30</maxHistory><!-- 日志輸出格式 --><layout class="ch.qos.logback.classic.PatternLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n</Pattern></layout>
</appender><!-- 異步輸出 --><appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender"><!-- 不丟失日志.默認的,如果隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日志 --><discardingThreshold >0</discardingThreshold><!-- 更改默認的隊列的深度,該值會影響性能.默認值為256 --><queueSize>512</queueSize><!-- 添加附加的appender,最多只能添加一個 --><appender-ref ref ="FILE"/></appender><root level ="trace"><appender-ref ref ="ASYNC"/></root>

?

轉載于:https://www.cnblogs.com/jianjun-blog/p/6636182.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254969.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254969.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux下c開發 之 線程通信(轉)

1.Linux“線程”進程與線程之間是有區別的&#xff0c;不過Linux內核只提供了輕量進程的支持&#xff0c;未實現線程模型。Linux是一種“多進程單線程”的操作系統。Linux本身只有進程的概念&#xff0c;而其所謂的“線程”本質上在內核里仍然是進程。大家知道&#xff0c;進程…

HDU 1028 Ignatius and the Princess III

//強行遞推。 xx[i][j]表示i數中第j個開頭的組合種類。 /* 最終結果[i]為 sum of(xx[i][j]) (j from 1 to i); xx[i][j]sum of (xx[i-j][k]) (k from 1 to j); 例如 xx[10][4]xx[6][1]xx[6][2]xx[6][3]xx[6][4]; xx[6][1] 1; 6111111; xx[6][2]3; 6222, 62211, 621111; xx[…

HALCON示例程序measure_metal_part_id.hdev使用xld邊緣擬合檢測零件加工是否合格

HALCON示例程序measure_metal_part_id.hdev使用xld邊緣擬合檢測零件加工是否合格 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () Imagefiles : [‘metal-parts/metal-part-model-01’,‘metal-parts/metal-parts-01’,‘metal-parts/meta…

編寫批處理文件-------基礎

第一、Windows bat 批處理文件 編寫 如何編寫批處理文件 批處理文件&#xff08;batch file&#xff09;包含一系列 DOS命令&#xff0c;通常用于自動執行重復性任務。 用戶只需雙擊批處理文件便可執行任務&#xff0c;而無需重復輸入相同指令。編寫批處理文件非常簡單&#xf…

主控芯片

主控芯片&#xff1a; 主控芯片里有310&#xff0c;320,3288&#xff0c;288,318&#xff0c;333&#xff0c;345&#xff0c;7501, 其中310是中星微發展比較早&#xff0c;比較成熟的芯片。在現在一般應用在水晶夾子之類的低端產品上。 3288也是低端芯片&#xff0c;318&…

MPEG2、H.263、H.264協議效率對比

[摘錄]1.1 MPEG2、H.263、H.264協議效率對比ITUT中定義的雙向視頻通信協議族包括&#xff1a;H.320、H.323&#xff0c;這兩個協議族中&#xff0c;包含了很多子協議&#xff0c;例如音頻編碼協議、視頻編碼協議等&#xff0c;其中視頻編碼包括&#xff1a;H.261、H.263、H.264…

WebService SOAP、Restful和HTTP(post/get)請求區別

web service&#xff08;SOAP&#xff09; Webservice的一個最基本的目的就是提供在各個不同平臺的不同應用系統的協同工作能力。 Web service 就是一個應用程序&#xff0c;它向外界暴露出一個能夠通過Web進行調用的API。 SOAP是一種簡單基于xml的輕量協議&#xff0c;用戶web…

Block的循環引用詳解

1.首先我們創建了一個網絡請求工具類 然后storyboard里面去創建了一個導航控制器 并且把它設置為初始控制器 然后拖入一個bar button &#xff0d;&#xff0d;show&#xff0d;&#xff0d;到自帶的控制器 這個時候運行代碼的結果是 x 顯然這個時候沒有造成循環引用 為什…

HALCON示例程序measure_pump.hdev螺紋孔位置與尺寸測量

HALCON示例程序measure_pump.hdev螺紋孔位置與尺寸測量 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_var (‘off’) dev_update_off () read_image (Image, ‘pumpe’) get_image_size (Image, Width, Height) dev_close_window () dev_open_…

計算機視覺和圖形學中的攝像機內參數矩陣詳解

在計算機視覺和圖形學中都有“攝像機內參數矩陣”這個概念&#xff0c;其含義大致相同&#xff0c;但在實際使用過程中&#xff0c;這兩個矩陣卻相差甚遠。在增強現實中&#xff0c;為了使計算機繪制的虛擬物體和真實環境圖像對其&#xff0c;需要令虛擬攝像機的內參數和真實攝…

c#和html方法互調

具體見連接&#xff1a;https://www.cnblogs.com/zeroLove/p/3912460.html轉載于:https://www.cnblogs.com/gaara-zhang/p/8746403.html

數據庫基礎雜記

sql,Structured Query Language結構化查詢語言。SQL 是一門 ANSI(美國國家標準局) 的標準計算機語言&#xff0c;用來訪問和操作數據庫系統。SQL 語句用于取回和更新數據庫中的數據。SQL 可與數據庫程序協同工作&#xff0c;比如 MS Access、DB2、Informix、MS SQL Server、Ora…

很有用的X264和ffmpeg的設置

很有用的X264和FFMPEG的設置 http://www.360doc.com/content/11/0209/16/3705984_91612512.shtml 點擊打開鏈接

HALCON示例程序measure_ring.hdev齒輪齒寬度測量

HALCON示例程序measure_ring.hdev齒輪齒寬度測量 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 read_image (Image, ‘rings_and_nuts’) dev_close_window () dev_open_window_fit_image (Image, 0, 0, 640, 640, WindowHandle) set_display_font (Windo…

基于RBGD的mapping

最近學習RGBD的SLAM&#xff0c;收集了兩個RGBD的mapping的開源工具包 1.RGBDSlam2 a.安裝方法&#xff1a; #準備工作空間 source /opt/ros/indigo/setup.bash mkdir -p ~/rgbdslam_catkin_ws/src cd ~/rgbdslam_catkin_ws/src catkin_init_workspace cd ~/rgbdslam_catkin_ws…

【瓜分5000元獎金】Wannafly挑戰賽13

鏈接&#xff1a;https://www.nowcoder.com/acm/contest/80/A來源&#xff1a;牛客網 zzy的小號 時間限制&#xff1a;C/C 1秒&#xff0c;其他語言2秒空間限制&#xff1a;C/C 262144K&#xff0c;其他語言524288K64bit IO Format: %lld題目描述 學家zzy根據字體的特點&#…

X264參數設定詳細解釋

x264 core:65 r1074M b6bb3d4 Syntax: x264 [options] -o outfile infile [widthxheight] 語法(命令行寫法)&#xff1a;x264 [參數] -o 輸出文件名 輸入文件名 [寬x高] 范例&#xff1a; x264 --crf 26 --ref 3 --mixed-refs --bframes 3 --b-adapt 2 --b-pyramid --weightb -…

20145217《網絡對抗》 惡意代碼分析

20145217《網絡對抗》 免殺原理與實踐 知識點學習總結 進行惡意代碼分析之前必須具備以下知識&#xff1a;編程、匯編/反匯編、網絡基本知識、PE文件結構以及一些常用行為分析軟件。 一、在一個已經感染了惡意代碼的機器上如何找到病毒文件&#xff1f; 找到惡意代碼才能對其分…

HALCON示例程序measure_screw.hdev螺紋尺寸測量

HALCON示例程序measure_screw.hdev螺紋尺寸測量 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () read_image (Image, ‘screw_thread’) get_image_pointer1 (Image, Pointer, Type, Width, Height) dev_close_window () dev_open_window…

邊工作邊刷題:70天一遍leetcode: day 97-2

Design Hit Counter 要點&#xff1a;因為是second granularity&#xff0c;所以可以用以秒為單位的circular buffer方法。這題簡單在只需要count過去300秒的&#xff0c;增加難度可以count過去秒&#xff0c;分鐘&#xff0c;小時。 2個時間點都有可能更新超時的統計&#xff…