我有一个Java应用程序,它运行在集群中的两台机器上,它们都登录到一个mysql数据库。一切正常,但我希望在数据库中有一个额外的字段,它表示请求来自的IP。
我通过两个不同的log4j.properties文件解决了这个问题,但我想有更好的方法来做到这一点?
这是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')

有没有类似mysql的连接ip?或者是log4j中的一个占位符,以便我可以从Java应用程序中将IP存储在其中?
干杯,卢卡斯

最佳答案

我使用log4j的映射诊断上下文解决了这个问题。
当我启动Java应用程序时,我用这个命令存储IP。

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

现在我可以使用%X{serverIP}作为log4j.properties文件中的占位符。
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

08-06 03:46