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));
}
添加回答
舉報