第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 GetLogger 中獲取類名并在 log4j 2 中打印正確的類名

如何在 GetLogger 中獲取類名并在 log4j 2 中打印正確的類名

猛跑小豬 2023-09-20 17:02:11
我創(chuàng)建了一個使用 log4j2 進行日志記錄的包裝器。這是一個自定義類,創(chuàng)建以下對象:logger = LogManager.getLogger(caller);問題是當(dāng)我打印 LogEvent 時,我沒有在源中獲得正確的類名。例如。如果abc.java是logging log.info,我需要捕獲abc.java源而不是customClass名稱。
查看完整描述

1 回答

?
手掌心

TA貢獻1942條經(jīng)驗 獲得超3個贊

您無法Logger在包裝對象中創(chuàng)建一次,因為它是使用特定的類名(不是您想要的)創(chuàng)建的。


因此,快速而骯臟的方法是調(diào)用LogManager.getLogger(caller).info(message)每個日志調(diào)用,并將調(diào)用類作為調(diào)用者傳遞。Log4J 保留已創(chuàng)建的 Logger 的哈希表,因此,如果同一調(diào)用者類已存在 Logger,則不會創(chuàng)建新的 Logger。


但是,我認為這對于這個用例來說還不夠優(yōu)化,所以我可能會使用 a ConcurrentHashMapand在包裝器對象中滾動我自己的緩存computeIfAbsent( ),以便現(xiàn)有 Logger 對象的檢索不會阻止其他對象。


所以我的模式是:


Logger logger = loggersPerClass.get(callerClassName);

if (logger == null) {

    logger = loggersPerClass.computeIfAbsent(callerClassName, k -> LogManager.getLogger(callerClass));

}


查看完整回答
反對 回復(fù) 2023-09-20
  • 1 回答
  • 0 關(guān)注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號