gpt4 book ai didi

java - 如何为每个 log4j 请求生成唯一的请求 id

转载 作者:行者123 更新时间:2023-12-02 13:34:08 27 4
gpt4 key购买 nike

我正在使用 log4j 打印请求和响应的日志。我想为每个请求分配一个唯一的 ID,为其响应分配相同的 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

最佳答案

您可以考虑使用上下文映射查找,这是一个简短的示例:

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

<?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>

输出

INFO -> This is http request 1
INFO -> This is http response 1
INFO -> This is http request 2
INFO -> This is http response 2

希望对你有帮助:)

关于java - 如何为每个 log4j 请求生成唯一的请求 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43097696/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com