I am using log4net AdoNetAppender with C# to log a custom XML message into a database. I have a stored procedure that takes one parameter as a XML format.
Here is a part of my config file:
<appender name="AdoNetAppender" type="log4net.Appender.ADONetAppender">
<bufferSize value="1" />
<threshold value="ALL" />
<reconnectOnError value="true" />
<param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=xxxdfasdfas" />
<param name="ConnectionString" value="Data Source=myserver;integrated security=false;Initial Catalog=mydatabase; Persist Security Info=True;User ID=me;Password=me;" />
<param name="UseTransactions" value="False" />
<commandText value="dbo.InsertLog " />
<commandType value="StoredProcedure" />
<parameter>
<parameterName value="#LogEntries" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{LogEntries}" />
</layout>
</parameter>
</appender>
With log4net, I should be able to do something like this,
mylogger.Info(FormatToXML(ID,Date,LogLevel,message)); //FormatToXML takes these arguments, and create XMLElement
However, above line doesn't insert anything to the database. I have log4net debugger turned on, but I didn't see any errors/exception.
But, this works,
log4net.GlobalContext.Properties["LogEntries"] = FormatToXML(ID,Date,LogLevel,message);
mylogger.Info("");
I am sure I am doing something wrong where I should be able to just call mylogger.Info(...).
Can anybody see where I am doing wrong?
You're using custom property to get the value in the parameter in layout. Change the layout pattern by simply using the %message.
<parameter>
<parameterName value="#LogEntries" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
Now will work normally with mylogger.Info(...).
Related
This is my configuration file contains log4net attributes, if I use "RollingLogFileAppender" appender it writes file correctly but I am using
"AdoNetAppender" and expect to see same string in message column of inserted row. But somehow this not work..
(table defination and query configurations are from apache documentation so it cant be wrong I though connection string is my problem, But application already have connection with the same db I also shared the connection string is being used by adonet)
<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="C:\\AkisLog\\Logs.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=******\SQLTEST;initial catalog=LISANSSIZ_SANTRAL_PROJE_ONAY;persist security info=True;user id=user;password=pwd" />
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (#log_date, #thread, #log_level, #logger, #message, #exception)" />
<parameter>
<parameterName value="#log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</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>
<parameter>
<parameterName value="#exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
...
<connectionStrings>
<add name="TedasDbContext" connectionString="metadata=res://*/Project.csdl|res://*/Project.ssdl|res://*/Project.msl;provider=System.Data.SqlClient;provider connection string="data source=****\SQLTEST;initial catalog=LISANSSIZ_SANTRAL_PROJE_ONAY;persist security info=True;user id=user;password=pwd;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
And .cs file:
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
if (log.IsErrorEnabled)
{
log.Error("Error ocurred here");
}
if (log.IsDebugEnabled)
{
log.Debug("Debug message");
}
Your buffersize is 100, which means that messages will be written after 100 messages. Change it to 1, it will flush the messages directly to the sql database:
<bufferSize value="1" />
If that does not work, enable log4net interal debugging to see if you have connection problems. Also check if you have the latest version of log4net.
I am trying to add a new rolling file appender to an existing log4net configuration. I have been looking at questions on S.O. and looking at the documentation however I can't seem to see where my issue is.
The problem is that it creates the file but never writes to it. All I can come up with is that somehow I have misunderstood how the hierarchies work? If I attached a debugger I can see the line get written to the console but even when I did a test deploy the log file document never has anything written to it. There are other questions about this however they all have issue with levelMin or something like that. I have tried setting my config to ALL, didn't help either.
Here is complete config so you can see what I am talking about.
<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="true">
<root>
<level value="ALL"/>
<appender-ref ref="CompassServiceTraceAppender" />
<appender-ref ref="EventLogAppender" />
<appender-ref ref="DbAppender" />
</root>
<logger name="Compass.Service.Implementation.EdiService">
<level value="ALL"/>
<appender-ref ref="EventProcessingFailureLogFileAppender" />
</logger>
<logger name="Compass.Service.Implementation.PhoneService">
<level value="ALL"/>
<appender-ref ref="LivevoxResultsReprocessorAppender"/>
</logger>
<logger name="DocumentImportLogger">
<level value="ALL"/>
<appender-ref ref="DocumentLogFileAppender" />
</logger>
<logger name="NHibernate">
<level value="ERROR"/>
<appender-ref ref="CompassServiceTraceAppender" />
<appender-ref ref="EventLogAppender" />
<appender-ref ref="DbAppender" />
</logger>
<appender name="DbAppender" type="log4net.Appender.AdoNetAppender">
<threshold value="WARN" />
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=.;initial catalog=logDb;integrated security=True;persist security info=True;" />
<commandText value="INSERT INTO ErrorLog ([Date],[Thread],[Level],[Logger],[Message],[Exception],[Environment],[Application],[User],[ObjectName],[ObjectId],[SupportId]) VALUES (#log_date, #thread, #log_level, #logger, #message, #exception, 'localhost','Compass BB', #user, #objectName, #objectId, #supportId)" />
<parameter>
<parameterName value="#log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.PatternLayout" value="%date{yyyy'-'MM'-'dd HH':'mm':'ss'.'fff}" />
</parameter>
<parameter>
<parameterName value="#thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout" value="%thread" />
</parameter>
<parameter>
<parameterName value="#log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout" value="%level" />
</parameter>
<parameter>
<parameterName value="#logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout" value="%logger" />
</parameter>
<parameter>
<parameterName value="#message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout" value="%message" />
</parameter>
<parameter>
<parameterName value="#exception" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout" value="%exception" />
</parameter>
<parameter>
<parameterName value="#user" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout" value="%property{CurrentUser}" />
</parameter>
<parameter>
<parameterName value="#objectName" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout" value="%property{ObjectName}" />
</parameter>
<parameter>
<parameterName value="#objectId" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout" value="%property{ObjectId}" />
</parameter>
<parameter>
<parameterName value="#supportId" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout" value="%property{SupportId}" />
</parameter>
</appender>
<appender name="CompassServiceTraceAppender" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level - %message%newline" />
</layout>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<threshold value="WARN" />
<param name="ApplicationName" value="Compass Best Benefits Service Host" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger %newline User: %property{CurrentUser} Object: %property{ObjectName} Id: %property{ObjectId} %newline %message %newline %exception"/>
</layout>
</appender>
<appender name="EventProcessingFailureLogFileAppender" type="log4net.Appender.RollingFileAppender">
<threshold value="ALL" />
<param name="File" value="c:\logs\EventProcessingFailure_log.txt" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy.MM.dd" />
<param name="StaticLogFileName" value="true" />
<param name="maxSizeRollBackups" value="10" />
<param name="maximumFileSize" value="1000KB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message %newline %exception" />
</layout>
</appender>
<appender name="LivevoxResultsReprocessorAppender" type="log4net.Appender.RollingFileAppender">
<threshold value="ALL" />
<param name="File" value="c:\logs\Livevoxreprocessor.txt" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy.MM.dd" />
<param name="StaticLogFileName" value="true" />
<param name="maxSizeRollBackups" value="10" />
<param name="maximumFileSize" value="1000KB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message %newline" />
</layout>
</appender>
<!--DocumentLogFileAppender-->
<appender name="DocumentLogFileAppender" type="log4net.Appender.RollingFileAppender">
<threshold value="ALL" />
<param name="File" value="c:\logs\DocumentLog.txt" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy.MM.dd" />
<param name="StaticLogFileName" value="true" />
<param name="maxSizeRollBackups" value="10" />
<param name="maximumFileSize" value="1000KB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message %newline" />
</layout>
</appender>
</log4net>
Here is the code example.
private static readonly HALogger Logger = new HALogger("DocumentImportLogger");
//which calls
public HALogger(string loggerName)
{
_logger = LogManager.GetLogger(loggerName);
}
//Then to log.
Logger.Info(string.Format("Checking for new documents - LastDocumentId: {0}", LastDocInfo.LastDocumentId));
Your config file looks fine to me.
The problem is that log4net silently ignores configuration errors by default and just silently fails - which is a sensible design choice for a logging framework but can be frustrating at times.
You can try enabling internal debugging and programmatically checking for configuration errors.
See the log4net faq => the relevant sections are:
"How do I enable log4net internal debugging?"
"How can I evaluate configuration errors at runtime?"
Also, please add a code example of how you obtain a logger and try writing to it.
I cannot get log4net to work, and having installed Glimpse for log4net, I notice the log4net tab is greyed out, so I guess I have not installed it properly, not sure where though.
In my assemblyInfo.cs I have:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
It may not be necessary, but in Global.asax.cs I have:
var logConfigFilePath = Server.MapPath("~/log4net.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(logConfigFilePath));
In my log4net.config I have:
?xml version="1.0"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" />
<connectionType value="System.Data.SqlClient.SqlConnection,
System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=SQL_Mulalley;initial catalog=LogFiles;Persist Security Info=True;User ID=***;Password=****;MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>
<commandText value="INSERT INTO SCD4_Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (#log_date, #thread, #log_level, #logger, #message, #exception)" />
<parameter>
<parameterName value="#log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</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>
<parameter>
<parameterName value="#exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
<root>
<level value="FATAL"/>
<appender-ref ref="RollingFileAppender"/>
</root>
</log4net>
</configuration>
I obtain the logger here:
private static readonly log4net.ILog log =
log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
And I call the log in my code as follows:
log.Info(string.Format("User {0} logged in.", model.UserName));
Nothing appears in my database where I have created the standard Log4Net table.
So what am I missing?
You did declare the appender but log4net is not actually using it.
As per your config file you're telling log4net to use an appender named RollingFileAppender (that is, additionally, not defined).
Change this:
<appender-ref ref="RollingFileAppender"/>
To:
<appender-ref ref="AdoNetAppender"/>
Finally pay attention to this section:
<root>
<level value="FATAL"/>
As per the line above, your (default) appender is not going to transmit any log unless you do the logs with Fatal level:
log.Fatal(string.Format("User {0} logged in.", model.UserName));
Or change the default log-level to debug:
<root>
<level value="DEBUG"/>
It can be the buffer size is 100 and hence you haven't hit the buffer limit to allow log4net to write to Db. Change it to one for testing
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" />
You can also see if the Adoappender is throwing any error by switching on Internal.Debug=true
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
I usually get issue with the SQL not being correct or the connection string is not correct.
I am trying to call an existing Stored Procedure but can't get it to log. Seems to be parameter type conversion problem, but I can't figure it out.
Error on build is:
log4net:ERROR XmlHierarchyConfigurator: Cannot find Property
[conversionPattern] to set object on
[log4net.Layout.RawPropertyLayout]
web.config is:
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
<bufferSize value="1" />
<threshold value="ALL"/>
<param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<param name="ConnectionString" value="Data Source=central-db.canterbury.ac.uk\devel;Initial Catalog=SourceDB;Persist Security Info=True;/>
<param name="UseTransactions" value="False" />
<commandText value="dbo.usperrLogError" />
<commandType value="StoredProcedure" />
<parameter>
<parameterName value="#ApplicationId"/>
<dbType value="String"/>
<size value="2" />
<layout type="log4net.Layout.RawPropertyLayout">
<key value="EventGuid" />
<conversionPattern value="%property{APP-ID}"/>
</layout>
</parameter>
//
<parameter>
<parameterName value="#EventGuid"/>
<dbType value="String"/>
<size value="50" />
<layout type="log4net.Layout.RawPropertyLayout">
<key value="EventGuid" />
<conversionPattern value="%property{GUID}"/>
</layout>
</parameter>
Am setting Properties like this:
log4net.ThreadContext.Properties["GUID"] = eventGuid.ToString();
Following the log4net debug error there is an additional error here:
A first chance exception of type 'System.ArgumentNullException' occurred in mscorlib.dll
log4net:ERROR [AdoNetAppender] Failed in DoAppend
System.ArgumentNullException: Key cannot be null.
Parameter name: key
at System.Collections.Hashtable.get_Item(Object key)
at log4net.Util.PropertiesDictionary.get_Item(String key) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Util\PropertiesDictionary.cs:line 114
at log4net.Core.LoggingEvent.LookupProperty(String key) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Core\LoggingEvent.cs:line 1404
at log4net.Layout.RawPropertyLayout.Format(LoggingEvent loggingEvent) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Layout\RawPropertyLayout.cs:line 84
at log4net.Appender.AdoNetAppenderParameter.FormatValue(IDbCommand command, LoggingEvent loggingEvent) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Appender\AdoNetAppender.cs:line 1117
at log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran, LoggingEvent[] events) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Appender\AdoNetAppender.cs:line 560
at log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] events) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Appender\AdoNetAppender.cs:line 501
at log4net.Appender.BufferingAppenderSkeleton.Append(LoggingEvent loggingEvent) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Appender\BufferingAppenderSkeleton.cs:line 463
at log4net.Appender.AppenderSkeleton.DoAppend(LoggingEvent loggingEvent) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Appender\AppenderSkeleton.cs:line 316
A first chance exception of type 'System.ArgumentNullException' occurred in mscorlib.dll
log4net:ERROR [AdoNetAppender] Failed in DoAppend
System.ArgumentNullException: Key cannot be null.
Clearly I am not using RawPropertyLayout correctly but can't find good examples!
I do something like you, but I use the log4net.Layout.PatternLayout like this:
<parameter>
<parameterName value="#ProjectParam1"/>
<dbType value="String"/>
<size value="254" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{OrderNumber}" />
</layout>
</parameter>
If I understand the log4net.Layout.RawPropertyLayout correctly, you have to use it as follows:
<parameterName value="#EventGuid"/>
<dbType value="String"/>
<size value="50" />
<layout type="log4net.Layout.RawPropertyLayout">
<param name="Key" value="GUID" />
</layout>
</parameter>
I have to log thread context properties like this:
string logFilePath = AppDomain.CurrentDomain.BaseDirectory + "log4netconfig.xml";
FileInfo finfo = new FileInfo(logFilePath);
log4net.Config.XmlConfigurator.ConfigureAndWatch(finfo);
ILog logger = LogManager.GetLogger("Exception.Logging");
log4net.ThreadContext.Properties["MESSAGE"] = exception.Message;
log4net.ThreadContext.Properties["MODULE"] = "module1";
log4net.ThreadContext.Properties["COMPONENT"] = "component1";
logger.Debug("test");
and the configuration file is:
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net>
<logger name="Exception.Logging" level="Debug">
<appender-ref ref="AdoNetAppender"/>
</logger>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<connectionString value="Data Source=xe;User ID=test;Password=test;" />
<connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<bufferSize value="10000"/>
<commandText value="Log_Exception_Pkg.Insert_Log" />
<commandType value="StoredProcedure" />
<parameter>
<parameterName value="#p_Error_Message" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{MESSAGE}"/>
</layout>
</parameter>
<parameter>
<parameterName value="#p_Module" />
<dbType value="String" />
<size value="225" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{MODULE}"/>
</layout>
</parameter>
<parameter>
<parameterName value="#p_Component" />
<dbType value="String" />
<size value="225" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{COMPONENT}"/>
</layout>
</parameter>
</appender>
</log4net>
</configuration>
But it's not inserting them in the database. How can I get that to work?
Simple answer: Because this is an Oracle connection remove the # symbol from the parameter name and it will work.
Sample:
<parameter>
<parameterName value="#p_Module" />
<dbType value="String" />
<size value="225" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{MODULE}"/>
</layout>
</parameter>
I had similar problem, when log4net table was in different schema.
(it surely applies to stored procedure or package too if they are in different schema)
Don't forget to type your schema name before table or stored procedure then.
Sample:
<log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<connectionType value="Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
<connectionString ..../>
<commandText value="INSERT INTO schemaName.LOG4NET (LOG_DATE, LOG_LEVEL, LOG_IDENTITY, LOG_MESSAGE, LOG_EXCEPTION) VALUES (:log_date, :log_level, :log_identity, :log_message, :log_exception)" />
....