[英]How to generate unique request id for each log4j request
I am printing log of request and response by using log4j. 我正在使用log4j打印请求和响应的日志。 I want to assign a unique ID to each request and same ID to its response, there are multiple requests so it will be easier for me to identify each request and response. 我想为每个请求分配一个唯一的ID,并为它的响应分配相同的ID,因为有多个请求,所以对我来说识别每个请求和响应将更加容易。
This is what i was using, but its not working. 这是我正在使用的,但是不起作用。 Its updating the UDID on response as well. 它也根据响应更新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);
}
Then i came to know that log4j provides a way to record unique ID to each request. 然后我才知道log4j提供了一种记录每个请求的唯一ID的方法。
I have read many posts on stackoverflow, but still unable to understand it. 我已经阅读了许多关于stackoverflow的文章,但仍然无法理解。
This is my properties
files. 这是我的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
You can consider using Context Map Lookup , here's a brief example: 您可以考虑使用Context Map Lookup ,这是一个简单的示例:
Java code sinppet: Java代码sinppet:
public static void main(String[] args) {
String uuid = "1";
logRequestObject("http request", uuid);
logResponseObject("http response");
uuid = "2";
logRequestObject("http request", uuid);
logResponseObject("http response");
}
static void logRequestObject(Object httpRequest, String uniqueID) {
ThreadContext.put("uniqueID", uniqueID); // Update uniqueID before logging request and response
logger.info("This is {}", httpRequest);
}
static void logResponseObject(Object httpResponse) {
logger.info("This is {}", httpResponse);
}
log4j.xml log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern='%level -> %msg %X{uniqueID}%n'/> <!-- Get uniqueID from ThreadContext -->
</Console>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
Output 输出量
INFO -> This is http request 1
INFO -> This is http response 1
INFO -> This is http request 2
INFO -> This is http response 2
I hope it helps :) 希望对您有所帮助:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.