Сохранение дополнительных значений в 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>

Спасибо


person Mohan    schedule 29.03.2012    source источник
comment
вы можете добавить пользователя в определенное пользователем сообщение, указанное %m   -  person MozenRath    schedule 29.03.2012
comment
Да, я знал, что могу отобразить в столбце, возможно ли это?   -  person Mohan    schedule 29.03.2012


Ответы (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}')
person beny23    schedule 29.03.2012
comment
я думаю, что всегда хорошо иметь текущего пользователя в MDC, так как он поддерживается для каждого потока. - person MozenRath; 29.03.2012