MS 测试单元测试 log4net

MS Test Unit Testing log4net

我想对我的记录器(它是 log4net 的包装器)是否正常工作进行单元测试。我遇到了这方面的问题,因为当单元测试项目中此行为 运行 时出现以下错误:

log4net.Config.XmlConfigurator.Configure();

输出中的错误 window:

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

这是我的单元测试项目中的完整 app.config:

<?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>

配置部分与我的主项目中的配置完全相同,其中记录器 class 按预期工作。我已经阅读了一些线程,建议像 运行 设置和自定义配置文件这样的想法,但其中 none 适合我的情况。建议?

问题出在你的 appender-ref 上,它应该指向一个 appender 而不是一个 logger:

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

应该是:

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