You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-user@logging.apache.org by Ron Grabowski <ro...@yahoo.com> on 2010/06/10 16:26:42 UTC

Re: Unable to log to database

Do you get the same errors if you use the shorter syntax from the log4net website:

<layout type="log4net.Layout.PatternLayout" value="%level" />




________________________________
From: Sachin Nair <sa...@gmail.com>
To: log4net-user@logging.apache.org
Sent: Tue, May 25, 2010 7:27:28 AM
Subject: Unable to log to database

Hi,
I am using powershell to log some information to database. Here 
are the details.

1. Code: Log4NetTest.ps1 
$ErrorActionPreference="Stop"

# load the log4net library
[void][Reflection.Assembly]::LoadFile("C:\Log4netTest\log4net.dll")

# Reset any log4net configuration to defaults.
[log4net.LogManager]::ResetConfiguration()

# configure logging
$configFileInfo = gi "C:\Log4netTest\log4net.xml"
[log4net.Config.XmlConfigurator]::ConfigureAndWatch($configFileInfo)

$logger = [log4net.LogManager]::GetLogger("MyLogs")

$logger.info("Started")
try
{
    $logger.info("Trying to create a file in the current directory ...")
    New-Item -ItemType file test.txt 
    $logger.info("Trying to create the same file again in the current directory ...")
    New-Item -ItemType file test.txt 
}
catch
{
    $logger.Error("You have an error")
    $logger.Fatal($_.Exception.message)
    $logger.Fatal($_.Exception.Message,$_.Exception)

}
finally
{
    $logger.Info("Ended")
}

2. Configuration 
file : log4net.xml 
  <!-- This section contains the log4net configuration settings -->
  <log4net>    
    <!-- Example of how to configure the AdoNetAppender to connect to MS SQL Server -->
    <appender name="ADONetAppender_SqlServer" type="log4net.Appender.AdoNetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="data source=[Sqlserver];initial catalog=[Database];integrated security=false;persist security info=True;User ID=sa;Password=[password]" />
      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message]) VALUES (@log_date, @thread, @log_level, @logger, @message)" />      
      <parameter>
        <parameterName value="@log_date" />
        <dbType value="DateTime" />
        <layout type="log4net.Layout.RawTimeStampLayout" />                     
      </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="@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>
    </appender>
    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
      <level value="ALL" />
       <appender-ref ref="ADONetAppender_SqlServer" />       
    </root>
    <!-- Specify the level for some specific categories -->
    <logger name="MyLogs">
      <level value="ALL" />
      <appender-ref ref="ADONetAppender_SqlServer" />
    </logger>
  </log4net>

3. Table : 
              CREATE TABLE 
[dbo].[Log]

(

    [Id] [int] IDENTITY (1, 
1) NOT NULL,
    [Date] [datetime] NOT NULL,
    [Thread] 
[varchar] (255) NOT NULL,
    [Level] [varchar] (50) NOT NULL,
    [Logger] [varchar] (255) NOT NULL,
    [Message] [varchar] (4000) NOT NULL,
    [Exception] [varchar] 
(2000) NULL
)

Output : output.txt
PS C:\Log4netTest> .\Log4NetTest.ps1
log4net:ERROR XmlHierarchyConfigurator: Could not create Appender [ADONetAppender_SqlServer] of type [log4net.Appender.A
doNetAppender]. Reported error follows.
System.ArgumentNullException: CreateConverterInstance cannot create instance, converterType is null
Parameter name: converterType
   at log4net.Util.TypeConverters.ConverterRegistry.CreateConverterInstance(Type converterType)
   at log4net.Util.TypeConverters.ConverterRegistry.GetConverterFromAttribute(Type destinationType)
   at log4net.Util.TypeConverters.ConverterRegistry.GetConvertFrom(Type destinationType)
   at log4net.Util.OptionConverter.CanConvertTypeTo(Type sourceType, Type targetType)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(XmlElement element, Type defaultTargetTy
pe, Type typeConstraint)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.SetParameter(XmlElement element, Object target)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(XmlElement element, Type defaultTargetTy
pe, Type typeConstraint)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.SetParameter(XmlElement element, Object target)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
log4net:ERROR XmlHierarchyConfigurator: Appender named [ADONetAppender_SqlServer] not found.
log4net:ERROR XmlHierarchyConfigurator: Could not create Appender [ADONetAppender_SqlServer] of type [log4net.Appender.A
doNetAppender]. Reported error follows.
System.ArgumentNullException: CreateConverterInstance cannot create instance, converterType is null
Parameter name: converterType
   at log4net.Util.TypeConverters.ConverterRegistry.CreateConverterInstance(Type converterType)
   at log4net.Util.TypeConverters.ConverterRegistry.GetConverterFromAttribute(Type destinationType)
   at log4net.Util.TypeConverters.ConverterRegistry.GetConvertFrom(Type destinationType)
   at log4net.Util.OptionConverter.CanConvertTypeTo(Type sourceType, Type targetType)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(XmlElement element, Type defaultTargetTy
pe, Type typeConstraint)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.SetParameter(XmlElement element, Object target)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(XmlElement element, Type defaultTargetTy
pe, Type typeConstraint)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.SetParameter(XmlElement element, Object target)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement)
log4net:ERROR XmlHierarchyConfigurator: Appender named [ADONetAppender_SqlServer] not found.


    Directory: C:\Log4netTest


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         5/25/2010   1:54 PM          0 test.txt


All the files 
can be found in the attached zip file.
Please modify the connection 
string in the xml file. 

When we have all the things like i mentioned nothing gets written to the database instead i get an error mentioned in the output.txt file.
It seems that there is some issues with the data types for the parameters 
I've mentioned in the XML file. I say this because if i comment all the 
other parameters except the date i.e. @log_date everything works 
fine i see the logs in the table provided the other columns are set to 
have null values. By the way i am using SQLSever2008 for the database.

I would really appreciate it if anyone can look into this and help 
me out.

Thanks in advance :)

Warm Regards
Sachin Nair