柚子快報(bào)邀請(qǐng)碼778899分享:Log4j2中的異步日志
柚子快報(bào)邀請(qǐng)碼778899分享:Log4j2中的異步日志
異步日志是log4j2最大的特色,其性能的提升主要也是從異步日志中受益。
Log4j2提供了兩種實(shí)現(xiàn)日志的方式,一個(gè)是通過(guò)AsyncAppender,一個(gè)是通過(guò)AsyncLogger,分別對(duì)應(yīng)前面我們說(shuō)的Appender組件和Logger組件。
?? 注意這是兩種不同的實(shí)現(xiàn)方式,在設(shè)計(jì)和源碼上都是不同的體現(xiàn)。
AsyncAppender方式
是通過(guò)引用別的Appender來(lái)實(shí)現(xiàn)的,當(dāng)有日志事件到達(dá)時(shí),會(huì)開(kāi)啟另外一個(gè)線程來(lái)處理它們。需要注意的是,如果在Appender的時(shí)候出現(xiàn)異常,對(duì)應(yīng)用來(lái)說(shuō)是無(wú)法感知的。 AsyncAppender應(yīng)該在它引用的Appender之后配置,默認(rèn)使用 java.util.concurrent.ArrayBlockingQueue實(shí)現(xiàn)而不需要其它外部的類庫(kù)。 當(dāng)使用此Appender的時(shí)候,在多線程的環(huán)境下需要注意,阻塞隊(duì)列容易受到鎖爭(zhēng)用的影響,這可能會(huì)對(duì)性能產(chǎn)生影響。這時(shí)候,我們應(yīng)該考慮使用無(wú)鎖的異步記錄器(AsyncLogger)。
?????? AsyncLogger方式
AsyncLogger才是log4j2實(shí)現(xiàn)異步最重要的功能體現(xiàn),也是官方推薦的異步方式。
它可以使得調(diào)用Logger.log返回的更快。你可以有兩種選擇:全局異步和混合異步。
全局異步:所有的日志都異步的記錄,在配置文件上不用做任何改動(dòng),只需要在jvm啟動(dòng)的時(shí)候增加一個(gè)參數(shù)即可實(shí)現(xiàn)。
混合異步:你可以在應(yīng)用中同時(shí)使用同步日志和異步日志,這使得日志的配置方式更加靈活。雖然Log4j2提供以一套異常處理機(jī)制,可以覆蓋大部分的狀態(tài),但是還是會(huì)有一小部分的特殊情況是無(wú)法完全處理的,比如我們?nèi)绻怯涗泴徲?jì)日志(特殊情況之一),那么官方就推薦使用同步日志的方式,而對(duì)于其他的一些僅僅是記錄一個(gè)程序日志的地方,使用異步日志將大幅提升性能,減少對(duì)應(yīng)用本身的影響。
混合異步的方式需要通過(guò)修改配置文件來(lái)實(shí)現(xiàn),使用AsyncLogger標(biāo)記配置。
?????? 性能對(duì)比:
??????
?
柚子快報(bào)邀請(qǐng)碼778899分享:Log4j2中的異步日志
推薦文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。