hbulens
hbulens

Reputation: 1969

MS Test Unit Testing log4net

I'd like to unit test if my logger (which is a wrapper around log4net) works correctly. I'm experiencing issues with this, as I get the following errors when this line is run in the unit test project:

log4net.Config.XmlConfigurator.Configure();

The errors in the output window:

log4net:ERROR XmlHierarchyConfigurator: No appender named [TraceLogger] could be found.
log4net:ERROR Appender named [TraceLogger] not found.

Here is the full app.config in my unit test project:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
 <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" />  
</configSections> 
<log4net>
  <appender name="DatabaseCallAppender" type="log4net.Appender.RollingFileAppender">
  <file value=".\\App_Data\\Logs" />
  <datePattern value=".yyyy-MM-dd'-Database.log'" />
  <appendToFile value="true" />
  <maximumFileSize value="256KB" />
  <maxSizeRollBackups value="2" />
  <rollingStyle value="Date" />
  <staticLogFileName value="false" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%level %thread %logger - %message%newline" />
  </layout>
</appender>
<appender name="TracingAppender" type="log4net.Appender.RollingFileAppender">
  <file value=".\\App_Data\\Logs" />
  <datePattern value=".yyyy-MM-dd'-Tracing.log'" />
  <appendToFile value="true" />
  <maximumFileSize value="256KB" />
  <maxSizeRollBackups value="2" />
  <rollingStyle value="Date" />
  <staticLogFileName value="false" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%level %thread %logger - %message%newline" />
  </layout>
</appender>
<logger name="DatabaseCallsLogger">
  <level value="DEBUG" />
  <appender-ref ref="DatabaseCallAppender" />
</logger>
<logger name="TraceLogger">
  <level value="DEBUG" />
  <appender-ref ref="TracingAppender" />
</logger>
<root>
  <level value="DEBUG" />
  <appender-ref ref="TraceLogger" />
</root>
</log4net>

The configuration section is exactly the same as the config in my main project, where the logger class works as expected. I have read a number of threads suggesting thinks like runsettings and custom config files, but none of those work in my situation. Suggestions?

Upvotes: 0

Views: 1473

Answers (1)

Peter
Peter

Reputation: 27944

The problem is in you appender-ref, which should point to an appender instead of a logger:

<root>
  <level value="DEBUG" />
  <appender-ref ref="TraceLogger" />
</root>

Should be:

<root>
  <level value="DEBUG" />
  <appender-ref ref="TracingAppender" />
</root>

Upvotes: 1

Related Questions