簡體   English   中英

防止在SessionScoped Bean中序列化CDI注入的Logger

[英]Prevent serialization of CDI injected Logger in SessionScoped beans

自從我開始使用XRebel以來,我一直在想以下幾點:

我們開始從以下位置替換記錄器(SLF4J)字段:

private static final Logger log = LoggerFactory...;

@Inject
private Logger log;

與各自的@Produces生產者。

通常,這可以正常工作,但是我想知道@SessionScoped bean的大小。 他們現在始終擁有自己的記錄器,根據XRebel的說法,每個Bean大約增加了900k。

根據文檔 ,現在SLF4J LoggerFactory.getLogger(Class clazz) 可以了

使用靜態綁定的ILoggerFactory實例,返回與作為參數傳遞的類相對應的命名記錄器

但是我不確定這是如何結合在一起的。

所以我的問題是:容器在每個會話bean的每個實例中是否確實都有一個記錄器,從而在會話大小上產生了相當大的開銷,還是使用@Inject變體而不產生所有開銷是安全的?

可以回答您的問題-這要視情況而定。

如果將記錄器的作用域限定為會話作用域,則可以,每個會話將具有自己的記錄器。 該記錄器將需要可序列化(並且通常不是,因為它們背后有文件句柄)。

除了具有自己的記錄器外觀外,我所做的就是使它們在應用程序范圍內。 通常情況下,記錄器在后台是高度同步的(多個調用者正在寫入一個附加程序),更改被排隊並定期寫入。 您可以使用應用程序范圍的記錄器,這將大大減少開銷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM