Hello,
I am using the AdoNetAppender in log4net to write error messages to a SQL
Server 2000 database. Here is the configuration I am using, taken from my
app.config file:
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<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=MHL1\SQL2000;Initial
Catalog=Stocks;Integrated Security=true;" />
<commandText value="INSERT INTO Log
([Date],[Thread],[Level],[Logger],[Message],[Exception],[Context],[Username])
VALUES
(@log_date, @thread, @log_level, @logger, @message, @exception,
@context, @username)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="32" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%t" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="512" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%p" />
</layout>
</parameter>
<parameter>
<parameterName value="@context" />
<dbType value="String" />
<size value="512" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%x" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="512" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%c" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%m" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
<parameter>
<parameterName value="@username" />
<dbType value="String" />
<size value="8" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%X{username}" />
</layout>
</parameter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ADONetAppender" />
</root>
</log4net>
I have created the "Log" table as referenced in the "CommandText" property with
fields having the same names and sizes for each of the parameters. As you can
see, the "@exception" parameter has a specified size of 2000 characters.
However, the "Exception" values that are stored in the table after errors occur
appear to be truncated at 256 characters.
The code I am using to configure log4net is as follows:
log4net.Config.XmlConfigurator.Configure()
Dim h As log4net.Repository.Hierarchy.Hierarchy =
CType(LogManager.GetRepository(), Repository.Hierarchy.Hierarchy)
Dim ado As Appender.AdoNetAppender =
CType(h.Root.GetAppender("ADONetAppender"), Appender.AdoNetAppender)
ado.ConnectionString = CGlobals.log4netConnectionString
ado.ActivateOptions()
log4net.GlobalContext.Properties("username") = Environment.UserName
And when storing the error, here is the code that I use:
Using log4net.NDC.Push(sContext)
Dim l4nLog As ILog =
LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
l4nLog.Error(sMessage)
End Using
Can anybody shed some light as to why this is happening? I am not truncating
anything in code, and also cannot see anything in the log4net source to
indicate that this would be happening there either.
Thanks,
Gary