2012-11-27 55 views
1

我有一個Spring web應用程序。 我想將其日誌記錄行爲更改爲始終在存儲在會話範圍的bean中的登錄用戶的名稱前加日誌行。 我們正在使用log4j。 有很多類正在記錄,但不是由Spring管理的。 儘管我們使用了一些AOP,但它全部是Spring AOP,而不是AspectJ,所以我無法在全局範圍內修改log4j行爲(並且僅僅爲了一個愚蠢的日誌記錄改進而引入AspectJ聽起來不是一個好主意)。使用Spring會話bean進行日誌記錄

我想不出任何理智的做法(甚至可以接受的瘋狂)。

回答

1

在你的servlet,你可以使用log4j的的嵌套診斷上下文做到這樣:

NDC.push(getUsername()); 
try { 
    .... 
} 
finally { 
    NDC.pop(); 
} 

如果您使用的是彈簧調度的servlet,你可以換調度的servlet在你自己的servlet,委託所有調用調度程序servlet並在那裏添加NDC-stuff。

+0

有趣,謝謝。我會給它一個鏡頭。 –

+1

如果我是你,我會使用MDC(那麼你可以有更多的屬性,例如log4j格式,「user =%X {user},path =%X {path}」)。我不會寫一個新的servlet - 使用過濾器。 –

+0

@DaveSyer是的,MDC聽起來可能更好。我不想用tomcat過濾器,所以我可能會使用Spring AOP來設置它。 –

相關問題