J'utilise log4net avec AdoNetAppender. Il enregistre toutes les informations de journal dans une table. Cette table a réellement 2 colonnes entières (peuvent être nulles).Valeurs par défaut pour le paramètre AdoNetAppender
Voici la partie pertinente de ma config log4net:
<commandText value="INSERT INTO ActivityLog ([Date],[Thread],[Level],[Logger],[Message],[DealID])
VALUES (@log_date,@thread,@log_level,@logger,@message,@DealID)" />
//other parameters hten DealID
<parameter>
<parameterName value="@DealID" />
<dbType value="Int32" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{DealID}" />
</layout>
</parameter>
Ce que j'ai découvert était si je ne mets pas explicitement d'utiliser quelque chose comme log4net.ThreadContext.Properties["DealID"] = DealID;
il me renvoie une exception:
System.FormatException occurred
Message="Failed to convert parameter value from a String to a Int32."
Source="System.Data"
StackTrace:
at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType)
InnerException: System.FormatException
Message="Input string was not in a correct format."
Source="mscorlib"
StackTrace:
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType)
InnerException:
Je devrais le mettre comme:
log4net.ThreadContext.Properties["DealID"] = 0;
Est-il possible de définir une valeur de paramètre par défaut dans ma configuration log4net pour ce champ Int32 de sorte que je n'ai pas besoin de le mettre explicitement à 0 si aucune valeur n'est fournie? Et je me demande pourquoi cela n'arrive pas aux champs qui sont définis comme varchar (bien qu'aucune valeur ne leur soit fournie).