Reputation: 299
I'm currently using log4net to log my messages and exceptions to database. I'm using this configuration:
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="Data Source=localhost\sqlexpress;Initial Catalog=LogDatabase;User ID=;Password=;"
providerName="System.Data.SqlClient" />
<commandText value="INSERT INTO Log ([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>
The logging is working correctly except for the fact that I'm confused about something:
If I log an exception using log.Error(ex)
then the exception will be logged into the message column, however when I use log.Error("Exception", ex)
then the message Exception
will be logged to the message column while the exception will be logged to the exception column.
I would like to be able to log my exception using log.Error(ex)
and to have the message column empty in that case and the exception logged to the actual exception column.
Upvotes: 4
Views: 2195
Reputation: 27944
When looking at the log4net documentation you have 2 methods:
void Error(Object message)
void Error(Object message, Exception ex)
http://logging.apache.org/log4net/release/sdk/html/M_log4net_ILog_Error.htm http://logging.apache.org/log4net/release/sdk/html/M_log4net_ILog_Error_1.htm
In both cases the first argument is the message. If you pass the exception into the message, the exception will be converted to the message (probably to string). Only the second function will fill the exception in the error log:
exception Type: System.Exception The exception to log, including its stack trace.
Upvotes: 3