0
log4jを使用してリクエストとレスポンスのログを出力しています。私は各リクエストに一意のIDを割り当て、同じIDをレスポンスに割り当てたいので、複数のリクエストがあるので、各リクエストとレスポンスを識別するのが容易になります。log4jリクエストごとに固有のリクエストIDを生成する方法
これは私が使用していたものですが、動作しません。応答時にUDIDを更新します。
public void logRequestObject(HttpServletRequest httprequest){
uniqueID= UUID.randomUUID().toString();
logger.info("Log4J - "+ "Request: requestId= "+ uniqueID+ ",Headers= "+ map);
}
public void logResponseObject(HttpServletResponse httpResponse){
logger.info("Log4J - "+ "Response: ,requestId= " + uniqueID + " ,responseTime= " + " totalTime= "+ totalTime);
}
次に、私はlog4jが各リクエストに一意のIDを記録する方法を提供することを知りました。
私はstackoverflowで多くの投稿を読んだことがありますが、まだ理解できません。
これは私のproperties
ファイルです。あなたはコンテキスト地図検索の使用を検討することができます
# Root logger option
log4j.rootLogger=INFO, stdout, file, CATALINA
# Catalina
log4j.appender.CATALINA=org.apache.log4j.RollingFileAppender
log4j.appender.CATALINA.File=${catalina.home}/logs/catalina.out
log4j.appender.CATALINA.MaxFileSize=10MB
log4j.appender.CATALINA.MaxBackupIndex=5
log4j.appender.CATALINA.layout=org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} %X{RequestId} %p-%c{1}: [%m]%n
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8
'uniqueID'スレッドを安全に保持するクラスは安全ですか?何が起こっているのかちょうど推測:スレッド1は 'uniqueID'の値を割り当て、要求を記録します。スレッド1が応答を記録する前に、スレッド2は新しい値を 'uniqueID'に割り当てます(そしてその要求を記録します)。次に、スレッド1は、スレッド2から新しい値が割り当てられた 'uniqueID'を使って応答を記録します。また、' map'と 'totalTime'も同じ問題があります。 –
返信いただきありがとうございます。いいえ、私はここに安全なスレッドを追加していない、私は春を使用しています – Kirmani88