logback高级特性使用-异步记录日志
生活随笔
收集整理的這篇文章主要介紹了
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丟失的代價性能的影響。另外其他的一些選項信息,也會對性能產生影響,下面列出常用的幾個屬性配置信息:
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丟失的代價性能的影響。另外其他的一些選項信息,也會對性能產生影響,下面列出常用的幾個屬性配置信息:
| 屬性名 | 類型 | 描述 |
| queueSize | int | BlockingQueue的最大容量,默認情況下,大小為256。 |
| discardingThreshold | int | 默認情況下,當BlockingQueue還有20%容量,他將丟棄TRACE、DEBUG和INFO級別的event,只保留WARN和ERROR級別的event。為了保持所有的events,設置該值為0。 |
| includeCallerData | boolean | 提取調用者數據的代價是相當昂貴的。為了提升性能,默認情況下,當event被加入到queue時,event關聯的調用者數據不會被提取。默認情況下,只有"cheap"的數據,如線程名。 |
?
?
默認情況下,event queue配置最大容量為256個events。如果隊列被填滿,應用程序線程被阻止記錄新的events,直到工作線程有機會來轉發一個或多個events。因此隊列深度需要根據業務場景進行相應的測試,做出相應的更改,以達到較好的性能。
下面給出一個使用的配置示例:
?
轉載于:https://www.cnblogs.com/jianjun-blog/p/6636182.html
總結
以上是生活随笔為你收集整理的logback高级特性使用-异步记录日志的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中信随借金额度多少?相关信息盘点
- 下一篇: WebService SOAP、Rest