Я использую приложение log4net.Appender.AdoNetAppender.
Моя таблица log4net - это следующие поля[Date],[Thread],[Level],[Logger],[Message],[Exception]
Мне нужно будет добавить еще одно поле в таблицу log4net (например, SalesId), но как я могу указать в моем xml и коде для регистрации «SalesId» при регистрации сообщения об ошибке или информации?
например log.Info("SomeMessage", SalesId)
Вот файл log4net xml
<appender name="SalesDBAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value ="System.Data.SqlClient.SqlConnection" />
<connectionString value="Data Source=..." />
<commandText value="INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
LogicalThreadContext
можно использовать с задачами , но его нельзя использоватьThreadContext
, потому что он всегда привязан к определенному потоку.В Log4Net доступны три типа контекста ведения журнала.
Log4Net.GlobalContext: - этот контекст используется всеми потоками приложений и доменами. Если два потока устанавливают одно и то же свойство в GlobalContext, одно значение переопределяет другое.
Log4Net.ThreadContext: - Эта область контекста ограничена вызывающим потоком. Здесь два потока могут устанавливать одно и то же свойство на разные значения, не переопределяя друг друга.
Log4Net.ThreadLogicalContext: - Этот контекст ведет себя аналогично ThreadContext. Если вы работаете с настраиваемым алгоритмом пула потоков или размещаете среду CLR, вам может пригодиться этот алгоритм.
Добавьте следующий код в свой файл program.cs:
2) Добавьте определение параметра для настраиваемого столбца:
источник
Вот рабочая версия с некоторыми индивидуальными настройками. Я добавил настраиваемый столбец для хранения сгенерированного кода исключения.
1) Добавьте свой собственный столбец (здесь exceptionCode) в конфигурацию Log4net:
2) Log4NetExtentedLoggingCustomParameters.cs
3) Log4NetExtentedLoggingPatternConverter.cs
4) Log4NetExtentedLoggingPatternLayout.cs
5) Logger.cs // Наслаждайтесь своим регистратором с новой колонкой! :)
Ссылки:
http://blog.stvjam.es/2014/01/logging-custom-objects-and-fields-with
источник