[英]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.