1

クラスター内の 2 台のマシンで実行される Java アプリケーションがあり、両方とも 1 つの MySQL データベースにログを記録します。すべて正常に動作しますが、リクエストの送信元の IP を表すフィールドをデータベースに追加したいと考えています。
2 つの異なる 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')

connection_ip のような MySQL 用のものはありますか? または、log4j のプレースホルダーで、Java アプリケーションからそこに IP を保存できますか?

4

1 に答える 1

2

log4j の Mapped Diagnostic Context を使用してこれを解決しました。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

于 2010-01-20T23:52:47.530 に答える