Сохранение дополнительных значений в log4j JDBCAppender
Я хотел бы сохранить дополнительные значения в моей таблице журнала, например, сохраняя идентификатор пользователя в отдельном столбце. Кто-нибудь знает, как я могу это сделать?
Вот моя конфигурация:
<appender name="jdbcAppender" class="org.apache.log4j.jdbc.JDBCAppender">
<param name="URL" value="jdbc:sqlite:D:/download/mapLogic/sf_log.db" />
<param name="user" value="" />
<param name="password" value="" />
<param name="driver" value="org.sqlite.JDBC" />
<param name="sql"
value="INSERT INTO sf_log(Message,Priority,Logger,Date) VALUES ('%m','%p','%c','%d{ABSOLUTE}')" />
</appender>
Спасибо
1 ответ
Вы можете сохранить пользователя в MDC и затем использовать его в своем операторе вставки.
MDC.put("user", userid);
try {
doTheActualWorkWhichWillUseLogger();
} finally {
// need to remove this to avoid causing leaks
MDC.remove("user");
}
Обратите внимание, вам не придется делать это для каждого logger
позвоните, только один раз, но я положил в remove
чтобы проиллюстрировать, что если это будет использоваться в сервлете, вам придется очистить MDC
снова, как только вы закончите с вызовом.
А затем для вашего заявления вставки:
INSERT INTO sf_log (Message,Priority,Logger,Date, user)
VALUES ('%m','%p','%c','%d{ABSOLUTE}', '%X{user}')