gpt4 book ai didi

java - Spring AOP中拦截log4j2的ThreadContext around Advice

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:36 28 4
gpt4 key购买 nike

  • 我有一个 Spring Web 应用程序,它从 UI 接收一些 URI 请求,并调用 Service 类中的业务逻辑来执行特定操作。

下面是我如何使用的快照:

log4j配置:

<Appenders>
<Jdbc ignoreExceptions="true" name="db-appender"
bufferSize="${env:LOG_DB_BUFFER_SIZE}" tableName="test.&quot;LOGS&quot;">
<ConnectionFactory class="com.pritam.logging.ConnectionFactory" method="getDatabaseConnection" />
<Column name="dated" isUnicode="false" isEventTimestamp="true" />
<Column name="logger" isUnicode="false" pattern="%logger" />
<Column name="level" isUnicode="false" pattern="%level" />
<Column name="message" isUnicode="false" pattern="%message" />
<Column name="exception" isUnicode="false" pattern="%ex{full}" />
<Column name="session_id" isUnicode="false" pattern="%X{session_id}"/>
</Jdbc>
</Appenders>

示例方法:

public void doSomething(String id, JobHeader jobHeader) {
ThreadContext.put("session_id", jobHeader.getContext().getSessionId());

//Business Logic
logger.debug("Logging Message");
//Business Logic

ThreadContext.clearAll();
}

这很好用。并在不同的列中记录 session ID。

现在,我有 n 个 doSomething 方法,这些方法将在具有各种 session ID 的独立线程中执行。而且我不想一遍又一遍地编写 ThreadContext 语句,因此我正在考虑使用 Spring-AOP 建议(@Around Advice)来完成此任务。

有人可以向我解释一下如何在 Spring-AOP 的 @Around 建议中注入(inject) ThreadContext 吗?

谢谢

最佳答案

我按照这些思路做了一些事情

假设我有一个组件

@Component
public class MyService {
public void doSomething() { ... }
}

然后我将其定义为方面:

@Component
@Aspect
public class MyServiceAspect {
@Before("execution(* <packages>.MyService.doSomething())")
public void beforeDoSomething() {
ThreadContext.put("key", "value");
}

@After("execution(* <packages>.MyService.doSomething())")
public void afterDoSomething() {
ThreadContext.clearAll();
}
}

希望对你有帮助

关于java - Spring AOP中拦截log4j2的ThreadContext around Advice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45485264/

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