Ich verwende den Appender log4net.Appender.AdoNetAppender.
Meine log4net-Tabelle enthält die folgenden Felder[Date],[Thread],[Level],[Logger],[Message],[Exception]
Ich müsste der log4net-Tabelle ein weiteres Feld hinzufügen (z. B. SalesId), aber wie würde ich in meiner XML und im Code angeben, um die "SalesId" beim Protokollieren einer Fehler- oder Infomeldung zu protokollieren?
z.B log.Info("SomeMessage", SalesId)
Hier ist die 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
mit Aufgaben verwendet werden. Die Verwendung ist jedoch nicht in OrdnungThreadContext
, da es immer an einen bestimmten Thread gebunden ist.In Log4Net stehen drei Arten von Protokollierungskontexten zur Verfügung.
Log4Net.GlobalContext: - Dieser Kontext wird von allen Anwendungsthreads und -domänen gemeinsam genutzt. Wenn zwei Threads dieselbe Eigenschaft für GlobalContext festlegen, überschreibt ein Wert den anderen.
Log4Net.ThreadContext: - Dieser Kontextbereich ist auf das Aufrufen von Threads beschränkt. Hier können zwei Threads dieselbe Eigenschaft auf unterschiedliche Werte setzen, ohne sich gegenseitig zu überschreiben.
Log4Net.ThreadLogicalContext: - Dieser Kontext verhält sich ähnlich wie der ThreadContext. Wenn Sie mit einem benutzerdefinierten Thread-Pool-Algorithmus arbeiten oder die CLR hosten, finden Sie möglicherweise eine Verwendung für diesen.
Fügen Sie Ihrer Datei program.cs den folgenden Code hinzu:
2) Fügen Sie die Parameterdefinition für die benutzerdefinierte Spalte hinzu:
quelle
Hier ist eine Arbeitsversion mit einigen personalisierten Einstellungen. Ich habe eine benutzerdefinierte Spalte zum Speichern eines generierten Ausnahmecodes hinzugefügt.
1) Fügen Sie Ihre benutzerdefinierte Spalte (Ausnahmecode hier) zur Log4net-Konfiguration hinzu:
2) Log4NetExtentedLoggingCustomParameters.cs
3) Log4NetExtentedLoggingPatternConverter.cs
4) Log4NetExtentedLoggingPatternLayout.cs
5) Logger.cs // Viel Spaß mit Ihrem Logger mit neuer Spalte! :) :)
Verweise:
http://blog.stvjam.es/2014/01/logging-custom-objects-and-fields-with
quelle