OK, it turned out to be something quite simple, and I feel a bit sheepish about 
it.  I was using the SQL Server 2000 Query Analyzer, which defaulted to a limit 
of 256 characters in the query results window.  This is why I believed it to be 
truncated.  After changing the limit, I can see the whole message.  Silly 
mistake, huh?

Many thanks for your help.
Gary

From: Ross Hinkley [mailto:rosshink...@gmail.com]
Sent: 11 May 2010 18:40
To: Log4NET User
Subject: Re: AdoNetAppender field sizes

I tried to recreate your problem on my local machine using your configuration.  
I agree with Ron; your config is fine.  I don't see the same truncation 
problem, though.

Maybe this is a silly question, but have you double-checked the database 
fields?  Are you perhaps running with ANSI_WARNINGS off?  I ask because log4net 
will complain about database field truncation unless the ANSI_WARNINGS are off. 
 Then, insertion commands that truncate will be allowed to execute, no matter 
where they are from.

Out of curiosity, have you tried performing an insert manually?

-Ross
On Tue, May 11, 2010 at 3:58 AM, Watson, Gary 
<gary.wat...@nustarenergy.com<mailto:gary.wat...@nustarenergy.com>> wrote:
I hadn't noticed v1.0 being used, but after replacing that with v2.0, it makes 
no difference.  I have even tried using a stored procedure instead, replacing 
the commandText value with the SP name, and setting commandType as 
"StoredProcedure", but it is still truncating.

-----Original Message-----
From: Ron Grabowski 
[mailto:rongrabow...@yahoo.com<mailto:rongrabow...@yahoo.com>]
Sent: 11 May 2010 01:57
To: Log4NET User
Subject: Re: AdoNetAppender field sizes

The config looks correct to me. Are you sure you want to use the .NET 1.0 
version of System.Data? Does this make a difference?

<connectionTypevalue="System.Data.SqlClient.SqlConnection, System.Data" />



----- Original Message ----
From: "Watson, Gary" 
<gary.wat...@nustarenergy.com<mailto:gary.wat...@nustarenergy.com>>
To: "log4net-user@logging.apache.org<mailto:log4net-user@logging.apache.org>" 
<log4net-user@logging.apache.org<mailto:log4net-user@logging.apache.org>>
Sent: Mon, May 10, 2010 8:19:48 AM
Subject: AdoNetAppender field sizes

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
______________________________________________________________________
This e-mail has been scanned by MCI Managed Email Content Service, using 
Skeptic(tm) technology powered by MessageLabs. For more information on MCI's 
Managed Email Content Service, visit http://www.mci.com.
______________________________________________________________________


______________________________________________________________________
This e-mail has been scanned by MCI Managed Email Content Service, using 
Skeptic(tm) technology powered by MessageLabs. For more information on MCI's 
Managed Email Content Service, visit http://www.mci.com.
______________________________________________________________________

Reply via email to