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