I've been using Log4Net to log to a database and it seems simple enough, but when I debug it I'm finding that all of the logging modes are still false.
I've tried to implement the solutions from here, here, and here but none of them are working for me.
All of them say basically the same things.. either I need
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "filepath", Watch = true)]
in my AsseblyInfo.cs
or that I could use
log4net.Config.XmlConfigurator.Configure(new FileInfo("filepath"));
before I call log4net.LogManager.GetLoggers()
I've tried both of these, moved them around to various places, put them in the startup project, put them in Application_Start()
but none of them have had any affect.
Here's my log4net.config file
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\Projects\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="ADOAppender" />
<appender-ref ref="FileAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.ConsoleAppender">
<file value="C:\Projects\Log.txt"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{ABSOLUTE} [%thread] %level - %message%newline%exception"/>
</layout>
</appender>
<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data"/>
<connectionString value="XXXXXXX"/>
<commandText value="dbo.sp_CreateErrorLog" />
<commandType value="StoredProcedure" />
<parameter>
<parameterName value="@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="@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="@User" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{log4net:HostName}" />
</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>
</log4net>
</configuration>
And my Class code:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "../log4net.config", Watch = true)]
namespace ...
{
public class LogService : ILogService
{
private readonly log4net.ILog _log;
public LogService()
{
log4net.Config.XmlConfigurator.Configure(new FileInfo("../log4net.config"));
_log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
//more stuff
}
}
Can anyone see something that I'm missing? I'm stumped.