I've got an assembly in which I use log4net. I load this assembly into both Windows forms applications and console applications. It works as expected in Windows forms apps in both release and debug builds, and console apps in debug builds, but mysteriously fails for release builds of console apps.
I have the following in my AssemblyInfo.cs file:
[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension="log4net", Watch = true)]
In classes that use logging I include the following member variable declaration:
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
And my Library.dll.log4net configuration file looks as follows:
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Library.log" />
<appendToFile value="true" />
<rollingStyle value="Once" />
<maxSizeRollBackups value="5" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
I've tried the suggestions in this article (Log4Net doesn’t write log in release mode - Console Application) but they don't seem to help.
I've also tried programmatically turning on internal debugging as soon as possible in the assembly (in the constructor of the first object referenced) but that also has no effect.
Any other ideas? Can anyone spot what I'm doing wrong?