Подтвердить что ты не робот

Log4Net и дополнительные поля

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

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

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

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

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

Ответ 1

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

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

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

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

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

Вы можете прочитать об этом здесь.

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

Ответ 2

Я думаю, вы должны использовать MDC.Set для установки дополнительных значений контекста. Проверьте Совет № 4 в этом блоге.