J'utilise l'appender log4net.Appender.AdoNetAppender.
Ma table log4net sont les champs suivants[Date],[Thread],[Level],[Logger],[Message],[Exception]
J'aurais besoin d'ajouter un autre champ à la table log4net (par exemple SalesId), mais comment spécifierais-je dans mon xml et dans le code pour enregistrer le "SalesId" lors de la journalisation d'un message d'erreur ou d'information?
par exemple log.Info("SomeMessage", SalesId)
Voici le xml log4net
<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
peut être utilisé avec Tasks, mais il n'est pas acceptableThreadContext
, car il est toujours lié à un thread particulier.Trois types de contexte de journalisation disponibles dans Log4Net.
Log4Net.GlobalContext: - Ce contexte partagé entre tous les threads et domaines d'application. Si deux threads définissent la même propriété sur GlobalContext, une valeur remplacera l'autre.
Log4Net.ThreadContext: - Cette portée de contexte est limitée à l'appel de thread. Ici, deux threads peuvent définir la même propriété sur des valeurs différentes sans se substituer l'une à l'autre.
Log4Net.ThreadLogicalContext: - Ce contexte se comporte de la même manière que ThreadContext. si vous travaillez avec un algorithme de pool de threads personnalisé ou hébergez le CLR, vous trouverez peut-être une utilité pour celui-ci.
Ajoutez le code suivant à votre fichier program.cs:
2) Ajoutez la définition de paramètre pour la colonne personnalisée:
la source
Voici une version fonctionnelle avec quelques préférences personnalisées. J'ai ajouté une colonne personnalisée pour stocker un code d'exception généré.
1) Ajoutez votre colonne personnalisée (exceptionCode ici) à la configuration Log4net:
2) Log4NetExtentedLoggingCustomParameters.cs
3) Log4NetExtentedLoggingPatternConverter.cs
4) Log4NetExtentedLoggingPatternLayout.cs
5) Logger.cs // Profitez de votre enregistreur avec la nouvelle colonne! :)
références:
http://blog.stvjam.es/2014/01/logging-custom-objects-and-fields-with
la source