こんにちは、ログインしたユーザーID、ホスト名、IPアドレスなどをログパターンに表示したいと思います。同じためにlog4jを使用しています。MDCを使用しています。私のメインコントローラーでは、指定されたパターンでログを表示できますが、他のファイルログではパターンを表示できません。セッションで MDC を設定し、コンテキスト値を他のコントローラーに再度配置したようなものですか? 提案してください。
log4j.properties
log4j.rootLogger=INFO,CONSOLE,R
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=C:/Logs/Test.log
log4j.appender.R.ImmediateFlush=true
log4j.appender.R.Append=true
log4j.appender.R.MaxFileSize=10MB
log4j.appender.R.MaxBackupIndex=10
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d %X{ipAddress} %X{hostName} %X{Asif}- %c - %p - %m%n
---------------------------------
MainController.java
try {
MDC.put("Asif", "Asif");
MDC.put("ipAddress", request.getRemoteAddr());
MDC.put("hostName", request.getServerName());
logger.info("Context Info : " + MDC.get("userId")+MDC.get("ipAddress")+MDC.get("hostName"));
} finally {
MDC.remove("ipAddress");
MDC.remove("hostName");
MDC.remove("Asif");
MDC.clear();
}
他にもさまざまなコントローラーがあります。現在、メイン コントローラー内の logger ステートメントはログ パターンにコンテキスト情報を表示していますが、他のコントローラーのその他のログ メッセージにはコンテキスト情報が表示されていません。
私の質問。1. すべてのコントローラーにコンテキスト情報を追加する必要がありますか? 2. より良いアプローチはありますか? 3. 何か不足していますか?