2009-11-16 77 views
1

我有一個Java應用程序在羣集中的兩臺機器上運行,它們都登錄到一個MySQL數據庫。一切工作正常,但我想在數據庫中有一個額外的字段,表示請求來自的IP。
我解決了這個問題,有兩個不同的log4j.properties文件,但我想有更好的方法來做到這一點?log4j日誌記錄到數據庫(在一個集羣中)

這是log4j.properties文件的行機器上是不同的:

log4j.appender.DB.sql=INSERT INTO log4j (date, category, priority, server, message) VALUES ('%d{dd MMM yyyy HH:mm:ss,SSS}','%c','%p','10.20.30.40','%m') 

有什麼像connection_ip MySQL的?或者是log4j中的佔位符,以便我可以從Java應用程序中將IP存儲在那裏?

乾杯,盧卡斯

回答

2

我使用log4j的的映射診斷上下文解決了這個。 當我啓動Java應用程序時,我用這個命令存儲IP。

MDC.put("serverIP", InetAddress.getLocalHost().getHostAddress()); 

現在我可以在我的log4j.properties文件中使用%X {serverIP}作爲佔位符。

log4j.appender.DB.sql=INSERT INTO log4j (date, category, priority, server, sessionID, message) VALUES ('%d{dd/MM/yyyy HH:mm:ss,SSS}','%c','%p','%X{serverIP}','%X{sessionID}','%m') 

這裏是關於log4j的一個極好的職位有幾個很好的例子
http://onjava.com/pub/a/onjava/2002/08/07/log4j.html?page=3