2009-11-16 60 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