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 Karim Bourouba <ka...@hotmail.com> on 2009/05/19 17:24:39 UTC

SystemNullReferenceException usgin log4net with MySql


Hi There,
 
I have been working with log4net now for a few weeks, after some work I have managed to use the ADONetAppender to log to a MySQL DB. However, although I can get messages into my DB, I am getting the following error on my console:
 

 log4net:ERROR [AdoNetAppender] Could not open database connection []
System.ArgumentNullException: Key cannot be null.
Parameter name: key
   at System.Collections.Hashtable.get_Item(Object key)
   at MySql.Data.MySqlClient.MySqlPoolManager.GetPool(MySqlConnectionStringBuilder settings)
   at MySql.Data.MySqlClient.MySqlConnection.Open()
   at log4net.Appender.AdoNetAppender.InitializeDatabaseConnection()
log4net:ERROR [AdoNetAppender] Could not open database connection []
System.ArgumentNullException: Key cannot be null.
Parameter name: key
   at System.Collections.Hashtable.get_Item(Object key)
   at MySql.Data.MySqlClient.MySqlPoolManager.GetPool(MySqlConnectionStringBuilder settings)
   at MySql.Data.MySqlClient.MySqlConnection.Open()
   at log4net.Appender.AdoNetAppender.InitializeDatabaseConnection()
 
The code for logging to my DB is as follows:
 
using log4net;
using log4net.Appender;
using log4net.Repository.Hierarchy;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.Text;
namespace BGCPLogger.LogSetup
{

public class SetUpLog
{
internal readonly ILog _log = LogManager.GetLogger(typeof(SetUpLog));
/*****************************************************************************/

internal SetUpLog()
{
log4net.Config.XmlConfigurator.Configure();
}
/*****************************************************************************/

public SetUpLog(string dbConn)
{
log4net.Config.XmlConfigurator.Configure();
createAdoSettings(dbConn);
}
/*****************************************************************************/

private Hierarchy hierachy()
{
Hierarchy h = (Hierarchy)log4net.LogManager.GetRepository();
return h;
}
/*****************************************************************************/

private AdoNetAppender adoAppender()
{
Hierarchy myHierarchy = hierachy();
if (myHierarchy != null)
{
AdoNetAppender adoApp = (AdoNetAppender)myHierarchy.Root.GetAppender("ADONetAppender");
return adoApp;
}
return null;
}
/*****************************************************************************/

private void createAdoSettings(string dbConn)
{
AdoNetAppender myAppender = adoAppender();
if (myAppender != null)
{
myAppender.ConnectionString = dbConn;
myAppender.UseTransactions = true;
myAppender.ActivateOptions();
}
}
}
}

My log4net section in my app.config looks like this:
 
<log4net> 
<root>
<level value="INFO" />
<appender-ref ref="ColoredConsoleAppender" />
<appender-ref ref="ADONetAppender" />
</root>
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
<bufferSize value="1" />
<connectionType value="MySql.Data.MySqlClient.MySqlConnection, MySql.Data" />
<commandText value="insert into `tbl_lg_mlog_task_logs`(mlog_lastuser,mlog_thread,mlog_level,mlog_logger,mlog_message,mlog_exception)values('',?thread,?log_level,'My Log',?message,?exception)" />
<parameter>
<parameterName value="?thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%t" />
</layout>
</parameter>
<parameter>
<parameterName value="?log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%p" />
</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="?host" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%X{host}" />
</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>
</appender>
<appender name="LogFileAppender"
type="log4net.Appender.FileAppender" >
<param name="File" value="C:\log-file.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]\r\n"/>
<param name="Footer" value="[Footer]\r\n"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender" >
<mapping>
<level value="INFO" />
<foreColor value="Green, HighIntensity" />
</mapping>
<mapping>
<level value="Warn" />
<foreColor value="Cyan, HighIntensity" />
</mapping>
<mapping>
<level value="Fatal" />
<foreColor value="Red, HighIntensity" />
</mapping>
<mapping>
<level value="Error" />
<foreColor value="Yellow, HighIntensity" />
</mapping>
<mapping>
<level value="Debug" />
<foreColor value="Cyan, HighIntensity" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<param name="Header" value="[Header]\r\n" />
<param name="Footer" value="[Footer]\r\n" />
<param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
</layout>
</appender>
</log4net>
 
I am sure this is a fairly simple thing to fix, right now I am assuming that it is just some missing configuration. If anyone could shed some light on this, I would be very greatful.
 
BR



_________________________________________________________________
Share your photos with Windows Live Photos – Free.
http://clk.atdmt.com/UKM/go/134665338/direct/01/