Happy to, and thanks Georg. What's the protocol around here for doing so? I followed an example I saw for extending ILog, LogManager, and LogImpl, or whatever it was, so I have 3 files plus a couple of lines of client code. Should I just mail a zip file back to the group, or include code directly in email, or ...?
-B WILLIAM BARNUM [EMAIL PROTECTED] -----Original Message----- From: Georg Jansen [mailto:[EMAIL PROTECTED] Sent: Wednesday, November 16, 2005 6:21 AM To: 'Log4NET User' Subject: RE: Can't log nulls with AdoNetAppender? Billy, Using the loggingEvent object is not exactly "out of the box". Can you post the code for how you instantiate this object, and a sample of the statements that write the log events? Best regards Georg http://www.l4ndash.com - Log4Net Dashboard / Log Viewer -----Original Message----- From: Billy Barnum [mailto:[EMAIL PROTECTED] Sent: 15. november 2005 00:07 To: 'Log4NET User' Subject: Can't log nulls with AdoNetAppender? My client is having me log to a SQL Server database using AdoNetAppender. All is going smoothly except for one thing: I can't seem get NULL values into database columns. Certain of the database columns are of SQL Server type Int (.NET type Int32) because they are primary key values in other tables and need to participate in joins - but the columns allow nulls; occasionally they aren't present. Whenever I pass System.DBNull.Value, the logevent never makes it to the database. My code does this: loggingEvent.Properties["BusinessId"] = prmBusinessId; <--- 1234 works here; System.DBNull.Value does not. and the corresponding parameter in my config file is this: <parameter> <parameterName value="@prmBusinessId" /> <dbType value="Int32" /> <size value="4" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%X{BusinessId}" /> </layout> </parameter> I've included internal debug output below, but I get the *exact same format exception error* for successful writes to the database and unsuccessful ones. SQL Server Profiler does not show the statement at all when I pass in DBNulls, from which I infer that log4net is choking on the null and not even making the attempt. Is there no way to get nulls into these columns, or am I doing something wrong? -BillyB WILLIAM BARNUM [EMAIL PROTECTED] log4net: XmlHierarchyConfigurator: Configuration update mode [Merge]. log4net: XmlHierarchyConfigurator: Logger [root] Level string is [DEBUG]. log4net: XmlHierarchyConfigurator: Logger [root] level set to [name="DEBUG",value=30000]. log4net: XmlHierarchyConfigurator: Loading Appender [SqlServerAppender] type: [log4net.Appender.AdoNetAppender] log4net: XmlHierarchyConfigurator: Setting Property [LevelMin] to Level value [DEBUG] log4net: XmlHierarchyConfigurator: Setting Property [LevelMax] to Level value [FATAL] log4net: XmlHierarchyConfigurator: Setting Collection Property [AddFilter] to object [log4net.Filter.LevelRangeFilter] log4net: XmlHierarchyConfigurator: Setting Property [BufferSize] to Int32 value [1] log4net: XmlHierarchyConfigurator: Setting Property [ConnectionType] to String value [System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089] log4net: XmlHierarchyConfigurator: Setting Property [ConnectionString] to String value [Data Source=BMT00002;Database=WIAN;User Id=wianuser;Password=wianuser;] log4net: XmlHierarchyConfigurator: Setting Property [Credentials] to ImpersonationMode value [Process] log4net: XmlHierarchyConfigurator: Setting Property [SecurityContext] to object [log4net.Util.WindowsSecurityContext] log4net: XmlHierarchyConfigurator: Setting Property [CommandType] to CommandType value [StoredProcedure] log4net: XmlHierarchyConfigurator: Setting Property [CommandText] to String value [dbo.EventLogInsStd] log4net: XmlHierarchyConfigurator: Setting Property [ParameterName] to String value [EMAIL PROTECTED] log4net: XmlHierarchyConfigurator: Setting Property [DbType] to DbType value [String] log4net: XmlHierarchyConfigurator: Setting Property [Size] to Int32 value [32] log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [ConversionPattern] to String value [%property{EventSource}] log4net: PatternParser: Converter [property] Option [EventSource] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.Layout2RawLayoutAdapter] log4net: XmlHierarchyConfigurator: Setting Collection Property [AddParameter] to object [log4net.Appender.AdoNetAppenderParameter] log4net: XmlHierarchyConfigurator: Setting Property [ParameterName] to String value [EMAIL PROTECTED] log4net: XmlHierarchyConfigurator: Setting Property [DbType] to DbType value [String] log4net: XmlHierarchyConfigurator: Setting Property [Size] to Int32 value [32] log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [ConversionPattern] to String value [%property{EventType}] log4net: PatternParser: Converter [property] Option [EventType] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.Layout2RawLayoutAdapter] log4net: XmlHierarchyConfigurator: Setting Collection Property [AddParameter] to object [log4net.Appender.AdoNetAppenderParameter] log4net: XmlHierarchyConfigurator: Setting Property [ParameterName] to String value [EMAIL PROTECTED] log4net: XmlHierarchyConfigurator: Setting Property [DbType] to DbType value [Int32] log4net: XmlHierarchyConfigurator: Setting Property [Size] to Int32 value [4] log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [ConversionPattern] to String value [%X{BusinessId}] log4net: PatternParser: Converter [X] Option [BusinessId] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.Layout2RawLayoutAdapter] log4net: XmlHierarchyConfigurator: Setting Collection Property [AddParameter] to object [log4net.Appender.AdoNetAppenderParameter] log4net: XmlHierarchyConfigurator: Setting Property [ParameterName] to String value [EMAIL PROTECTED] log4net: XmlHierarchyConfigurator: Setting Property [DbType] to DbType value [Int32] log4net: XmlHierarchyConfigurator: Setting Property [Size] to Int32 value [4] log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [ConversionPattern] to String value [%property{WIANOrderId}] log4net: PatternParser: Converter [property] Option [WIANOrderId] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.Layout2RawLayoutAdapter] log4net: XmlHierarchyConfigurator: Setting Collection Property [AddParameter] to object [log4net.Appender.AdoNetAppenderParameter] log4net: XmlHierarchyConfigurator: Setting Property [ParameterName] to String value [EMAIL PROTECTED] log4net: XmlHierarchyConfigurator: Setting Property [DbType] to DbType value [Int32] log4net: XmlHierarchyConfigurator: Setting Property [Size] to Int32 value [4] log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [ConversionPattern] to String value [%property{CustomerId}] log4net: PatternParser: Converter [property] Option [CustomerId] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.Layout2RawLayoutAdapter] log4net: XmlHierarchyConfigurator: Setting Collection Property [AddParameter] to object [log4net.Appender.AdoNetAppenderParameter] log4net: XmlHierarchyConfigurator: Setting Property [ParameterName] to String value [EMAIL PROTECTED] log4net: XmlHierarchyConfigurator: Setting Property [DbType] to DbType value [String] log4net: XmlHierarchyConfigurator: Setting Property [Size] to Int32 value [32] log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [ConversionPattern] to String value [%property{CodePoint}] log4net: PatternParser: Converter [property] Option [CodePoint] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.Layout2RawLayoutAdapter] log4net: XmlHierarchyConfigurator: Setting Collection Property [AddParameter] to object [log4net.Appender.AdoNetAppenderParameter] log4net: XmlHierarchyConfigurator: Setting Property [ParameterName] to String value [EMAIL PROTECTED] log4net: XmlHierarchyConfigurator: Setting Property [DbType] to DbType value [String] log4net: XmlHierarchyConfigurator: Setting Property [Size] to Int32 value [16] log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [ConversionPattern] to String value [%property{ComputerUserId}] log4net: PatternParser: Converter [property] Option [ComputerUserId] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.Layout2RawLayoutAdapter] log4net: XmlHierarchyConfigurator: Setting Collection Property [AddParameter] to object [log4net.Appender.AdoNetAppenderParameter] log4net: XmlHierarchyConfigurator: Setting Property [ParameterName] to String value [EMAIL PROTECTED] log4net: XmlHierarchyConfigurator: Setting Property [DbType] to DbType value [Int32] log4net: XmlHierarchyConfigurator: Setting Property [Size] to Int32 value [4] log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [ConversionPattern] to String value [%property{EmployeeId}] log4net: PatternParser: Converter [property] Option [EmployeeId] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.Layout2RawLayoutAdapter] log4net: XmlHierarchyConfigurator: Setting Collection Property [AddParameter] to object [log4net.Appender.AdoNetAppenderParameter] log4net: XmlHierarchyConfigurator: Setting Property [ParameterName] to String value [EMAIL PROTECTED] log4net: XmlHierarchyConfigurator: Setting Property [DbType] to DbType value [String] log4net: XmlHierarchyConfigurator: Setting Property [Size] to Int32 value [32] log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [ConversionPattern] to String value [%property{EmployeeFirstName}] log4net: PatternParser: Converter [property] Option [EmployeeFirstName] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.Layout2RawLayoutAdapter] log4net: XmlHierarchyConfigurator: Setting Collection Property [AddParameter] to object [log4net.Appender.AdoNetAppenderParameter] log4net: XmlHierarchyConfigurator: Setting Property [ParameterName] to String value [EMAIL PROTECTED] log4net: XmlHierarchyConfigurator: Setting Property [DbType] to DbType value [String] log4net: XmlHierarchyConfigurator: Setting Property [Size] to Int32 value [32] log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [ConversionPattern] to String value [%property{EmployeeLastName}] log4net: PatternParser: Converter [property] Option [EmployeeLastName] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.Layout2RawLayoutAdapter] log4net: XmlHierarchyConfigurator: Setting Collection Property [AddParameter] to object [log4net.Appender.AdoNetAppenderParameter] log4net: XmlHierarchyConfigurator: Setting Property [ParameterName] to String value [EMAIL PROTECTED] log4net: XmlHierarchyConfigurator: Setting Property [DbType] to DbType value [String] log4net: XmlHierarchyConfigurator: Setting Property [Size] to Int32 value [2048] log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: PatternParser: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [ConversionPattern] to String value [%message] log4net: PatternParser: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] log4net: XmlHierarchyConfigurator: Setting Property [Layout] to object [log4net.Layout.Layout2RawLayoutAdapter] log4net: XmlHierarchyConfigurator: Setting Collection Property [AddParameter] to object [log4net.Appender.AdoNetAppenderParameter] log4net: XmlHierarchyConfigurator: Created Appender [SqlServerAppender] log4net: XmlHierarchyConfigurator: Adding appender named [SqlServerAppender] to logger [root]. log4net: XmlHierarchyConfigurator: Hierarchy Threshold [] '/LM/w3svc/1/root/log4netTest-5-127765108162748686': Loaded 'c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\log4nettest\3367badd\2fed7587\l6xcisvj.dll', Symbols loaded. log4net:ERROR [AdoNetAppender] Exception while writing to database System.FormatException: Input string was not in a correct format. at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran, LoggingEvent[] events) at log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] events) log4net:ERROR [AdoNetAppender] Exception while writing to database System.FormatException: Input string was not in a correct format. at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran, LoggingEvent[] events) at log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] events)
