nunit-core team mailing list archive
-
nunit-core team
-
Mailing list archive
-
Message #01351
Re: [Bug 605034] Re: Log4net not working with NUnit
Interesting blog post - I'll have to read it more carefully to see if there is
any way that we can make the workaround unnecessary. If not, this
will just be a "won't fix" for NUnit 2.x.
There seems to be one misunderstanding of what NUnit is doing in your
post. You write
"After all this is completed, NUnit will begin to execute the first
TestFixture class it can find, when that happens,
assuming the logger is created in a static object initialization
style, NUnit will call into log4net to create a logger
identified by the given type or string. log4net will grab the calling
assembly to begin creation of the logger."
In fact, NUnit does not use log4net for logging. (One exception,
pnunit, which was written by
a third party, does use it.) Where you see NUnit creating loggers
using a static syntax similar
to that of log4net, it's actually creating loggers for its own
internal trace facility.
With NUnit 3.0, we'll revisit this issue and may provide separate
addins for capturing output
from various logging systems.
Charlie
On Sat, Nov 13, 2010 at 4:24 AM, Rover <605034@xxxxxxxxxxxxxxxxxx> wrote:
> Hi Charlie,
>
> I do not believe that it is a bug at all. I have provided two solutions in my blog post
> http://do-the-right-things.blogspot.com/2010/11/log4net-configuration-issue-when-using.html
>
> In short, it is because NUnit contains code in
> NUnit.Core.Log4NetCapture.StartCapture() that causes log4net to
> construct a default repository without finding the user's specified
> config file. Full technical disclosure is found on my blog post.
>
> The way to over come this is to put a key="log4net.Config" in the
> <appSettings> in the NUnit project's config file and in the value
> specify the log4net config file. With this simple specifiication, NUnit
> 2.5.7 will work just fine.
>
> Rover.
>
> --
> Log4net not working with NUnit
> https://bugs.launchpad.net/bugs/605034
> You received this bug notification because you are a member of NUnit
> Developers, which is subscribed to NUnit V2.
>
--
Log4net not working with NUnit
https://bugs.launchpad.net/bugs/605034
You received this bug notification because you are a member of NUnit
Developers, which is subscribed to NUnit V2.
Status in NUnit V2 Test Framework: Triaged
Bug description:
Problem: Using log4net with newer versions of nunit means that no
log file is created.
Demonstration follows.
I created the solution in VS 2008.
The OS is Windows XP.
I tested using both the nunit GUI and console.
I compared Nunit 2.2.5 with 2.5.5 (I suspect 2.5.0 will fail as well.)
The solution is created as a console app.
When the app is run as a console application a Log file is produced.
When the app is run using 2.2.5 a Log file is produced.
When the app is run using 2.5.5 no Log file is produced.
There are two files in the solution: Log.config and Program.cs
Following comes from a file name "Log.config"
----------------------------------------------
<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="false">
<appender name="DefaultLogFile" type="log4net.Appender.RollingFileAppender">
<file value=".\Log" />
<appendToFile value="false" />
<staticLogFileName value="false" />
<rollingStyle value="Date" />
<datePattern value="'.'yyyyMMdd'.log'" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%utcdate{ABSOLUTE} %-5level %message%newline" />
</layout>
</appender>
<root>
<level value="All" />
<appender-ref ref="DefaultLogFile" />
</root>
</log4net>
-----------------------------------------------------
Following is Program.cs
-----------------------------------------------------
using System;
using System.Reflection;
using NUnit.Framework;
[assembly: log4net.Config.XmlConfiguratorAttribute(ConfigFile = "Log.config", Watch = true)]
namespace TestNunitLog4net
{
[TestFixture]
public class Program
{
private static readonly log4net.ILog log
= log4net.LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
// Test scenarios
// Test 1: Works - log show up (gui and console)
// log4net: 1.2.10.0
// Nunit: 2.2.5.0
// Test 2: Fails - no log file (gui and console)
// log4net: 1.2.10.0
// Nunit: 2.5.5.10112
// Following has no impact.
// It exists just so we can see it in log.
private readonly String exeType;
static void Main()
{
Program p = new Program("Exe");
p.TestLog();
}
private Program(String stype)
{
this.exeType = stype;
}
public Program()
{
this.exeType = "Nunit";
}
[Test]
public void TestLog()
{
log.Debug(exeType + ": First line");
log.Debug(exeType + ": Second line");
}
} // End of class
} // End of namespace
---------------------------------------------------------------
References