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使用'uniqueID'記錄它的響應,這個'uniqueID'被分配了一個來自線程2的新值。另外,'map'和'totalTime'可能有相同的問題。 –
感謝您的回覆,並且我沒有在此處添加任何線程,我正在使用spring – Kirmani88