- I'm using log4j2 JDBC logging to log in Database.
- Now I want to log session-Id in a different column in Database. And for this, I'm using ThreadContext Map to pass session-Id to be saved as mentioned here: [https://logging.apache.org/log4j/2.x/manual/thread-context.html](https://logging.apache.org/log4j/2.x/manual/thread-context.html)
下面是我如何使用的快照:
log4j配置:
<Appenders>
<Jdbc ignoreExceptions="true" name="db-appender"
bufferSize="${env:LOG_DB_BUFFER_SIZE}" tableName="test."LOGS"">
<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();
}
这个很好用。并在另一列中记录会话id。
现在,我有n个doSomething方法,它们将在具有各种会话I的独立线程中执行。而且我不想一遍又一遍地写ThreadContext语句,所以我考虑在这个任务中使用Spring建议(@Around通知)。
请有人向我解释一下,如何在Spring中插入@ ThreadContext的建议。
谢谢
发布于 2017-10-15 18:27:35
我做了一些事情
假设我有一个组件
@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();
}
}
希望它能帮上忙
https://stackoverflow.com/questions/45485264
复制相似问题