1

我有一个 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 有没有类似 connection_ip 的东西?还是 log4j 中的占位符,以便我可以从 Java 应用程序将 IP 存储在其中?

4

1 回答 1

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

于 2010-01-20T23:52:47.530 回答