1
我有一個spring web應用程序,它從UI接收一些URI請求並調用Service類中的業務邏輯來執行特定操作。在Spring AOP中截取log4j2的ThreadContext約會
- 我正在使用log4j2 JDBC日誌記錄來登錄數據庫。
- 現在我想將會話Id記錄在數據庫的不同列中。而對於這一點,我使用ThreadContext地圖通過會話標識保存爲這裏所說: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方法將在具有各種會話ID的獨立線程中執行。 我不想一遍又一遍地寫出ThreadContext語句,所以我正在考慮爲這個任務使用Spring-AOP建議(@Around Advice)。
有人能請我解釋一下如何在Spring-AOP的@Around建議中注入ThreadContext。
謝謝
Hi @Ra杜,謝謝你的回答。我現在也以同樣的方式使用它。 – pritamprasad