Używam programu dołączającego log4net.Appender.AdoNetAppender.
Moja tabela log4net to następujące pola[Date],[Thread],[Level],[Logger],[Message],[Exception]
Musiałbym dodać kolejne pole do tabeli log4net (np. SalesId), ale jak określić w moim xml i kodzie, aby rejestrować „SalesId” podczas rejestrowania komunikatu błędu lub informacji?
na przykład log.Info("SomeMessage", SalesId)
Oto plik 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
można używać z zadaniami, ale nie można go używaćThreadContext
, ponieważ jest zawsze powiązany z określonym wątkiem.Trzy rodzaje kontekstu logowania dostępne w Log4Net.
Log4Net.GlobalContext: - ten kontekst współużytkowany we wszystkich wątkach aplikacji i domenach.Jeśli dwa wątki ustawią tę samą właściwość w GlobalContext, jedna wartość zastąpi drugą.
Log4Net.ThreadContext: - ten zakres kontekstu ograniczony do wywoływania wątku. Tutaj dwa wątki mogą ustawić tę samą właściwość na różne wartości bez nadpisywania siebie nawzajem.
Log4Net.ThreadLogicalContext: - ten kontekst zachowuje się podobnie do ThreadContext. jeśli pracujesz z niestandardowym algorytmem puli wątków lub hostujesz środowisko CLR, możesz znaleźć zastosowanie dla tego.
Dodaj następujący kod do pliku program.cs:
2) Dodaj definicję parametru dla kolumny niestandardowej:
źródło
Oto działająca wersja z kilkoma spersonalizowanymi preferencjami. Dodałem niestandardową kolumnę do przechowywania wygenerowanego kodu wyjątku.
1) Dodaj swoją niestandardową kolumnę (tu wyjątek) do konfiguracji Log4net:
2) Log4NetExtentedLoggingCustomParameters.cs
3) Log4NetExtentedLoggingPatternConverter.cs
4) Log4NetExtentedLoggingPatternLayout.cs
5) Logger.cs // Ciesz się swoim loggerem z nową kolumną! :)
Bibliografia:
http://blog.stvjam.es/2014/01/logging-custom-objects-and-fields-with
źródło