By using a log4net ConsoleAppender, you can write all log messages in your application to the console. These message will show up in the Microsoft Visual Studio output window. I needed a way to redirect the messages written to the console, so I could verify if the correct messages were send to the console. For this task I redirected the standard console output in my unit test:

 

Code

using System;
using System.IO;
using System.Text;
using log4net;
using log4net.Config;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace TestProject1
{
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
// Save original console output writer.
TextWriter originalConsole = Console.Out;
// Configure log4net based on the App.config
XmlConfigurator.Configure();
var builder = new StringBuilder();
using (var writer = new StringWriter(builder))
{
// Redirect all Console messages to the StringWriter.
Console.SetOut(writer);
// Log a debug message.
ILog logger = LogManager.GetLogger("Unittest logger");
logger.Debug("This is a debug message");
}
// Get all messages written to the console.
string consoleOutput = string.Empty;
using (var reader = new StringReader(builder.ToString()))
{
consoleOutput = reader.ReadToEnd();
}
// Assert.
string expected = "This is a debug message" + Environment.NewLine;
Assert.AreEqual(expected, consoleOutput);
// Redirect back to original console output.
Console.SetOut(originalConsole);
}
}
}

App.config

 

<?xml version="1.0"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>

Microsoft Visual Studio

 

image

 

I used NuGet to add a reference to the latest log4net build.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.