2012-03-29 3 views
3

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

Спасибо

+0

вы можете добавить пользователя в определенные пользователем сообщения, указанного% м – MozenRath

+0

Да я знал, что могу я в состоянии отобразить в столбце, что любой возможный – Mohan

ответ

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}') 
+0

я думаю, что всегда полезно иметь текущего пользователя в MDC, поскольку он поддерживается в потоке. – MozenRath