2009-11-25 4 views
12

Можно ли вставить дополнительные поля в базу данных и использовать их в log4net? У меня есть UserId, который я хотел бы иметь в дополнительном поле в log-table.Log4Net и дополнительные поля

Я добавил поле в log4net.config:

<parameter> 
    <parameterName value="@userid" /> 
    <dbType value="guid" /> 
    <layout type="log4net.Layout.RawPropertyLayout" /> 
</parameter> 

Но как обновить интерфейс ILog для поддержки дополнительных полей базы данных. Так что я мог бы, например, войти:

log4net.LogManager.GetLogger("logname").Fatal(message, exception, userid); 

ответ

19

Вы можете использовать функцию «контекста» в log4net. В основном это позволяет вам устанавливать свойства, которые затем можно использовать в вашем приложении для журналов. Вы можете установить эти свойства в разных областях (Global, Thread и т. Д.). В вашем случае я думаю, вы могли бы пойти (например, сразу после того, как пользователь вошел в систему):

log4net.ThreadContext.Properties["userid"] = userid; 

В файле конфигурации, можно затем использовать это свойство и добавить его в лесозаготовительной Appender. Я думаю, что это будет что-то подобное для AdoNetAppender

<parameter> 
    <parameterName value="@userid" /> 
    <dbType value="guid" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%property{userid}" /> 
    </layout> 
</parameter> 

Пожалуйста, обратите внимание, что я не компилируется любого из вышеуказанных фрагментов, так что они, возможно, потребуется перенастройка, но это должно дать вам общее представление о том, как это могло бы решить.

Подробнее об этом можно узнать здесь here.

Ps. Я думаю, что MDC.Set, упомянутый в первом ответе, устарел.

2

Я думаю, вы должны использовать MDC.Set для установки дополнительных значений контекста. Проверьте Tip #4 in this blog.

Смежные вопросы