Сохранение дополнительных значений в log4j JDBCAppender - PullRequest
3 голосов
/ 29 марта 2012

Я хотел бы сохранить дополнительные значения в моей таблице журнала, например, сохранить идентификатор пользователя в отдельном столбце. Кто-нибудь знает, как я могу это сделать?

Вот моя конфигурация:

<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 Ответ

1 голос
/ 29 марта 2012

Вы можете сохранить пользователя в 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}')
...