以编程方式在log4net中添加和删除日志追加器

Pet*_*ete 23 .net log4net nunit

我有一个使用log4net的组件.我想创建单元测试,验证某些错误条件会导致正确的日志记录.

我认为最好的方法是创建一个ILogAppender实现,例如mock.然后,我会在测试设置期间将log appender添加到log4net,检查测试验证期间写入的内容,并在测试拆解期间再次删除它.

这可能吗?

pie*_*rs7 19

使用BasicConfigurator可以进行单元测试(OP要求的内容,但不是主题行中的内容).另一个答案是获取特定记录器的输出.

我想要一切(这是一个网站内的'自测'页面).最后我基本上做了以下几点:

var root = ((log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository()).Root;
var attachable = root as IAppenderAttachable;

var appender = new log4net.Appender.MemoryAppender();
if(attachable!=null)
    attachable.AddAppender(appender);
// do stuff
var loggingEvents = appender.GetEvents();
foreach (var loggingEvent in loggingEvents)
    loggingEvent.WriteRenderedMessage(writer);
if(attachable!=null)
    attachable.RemoveAppender(appender);
Run Code Online (Sandbox Code Playgroud)

......但按照@ Pawel的方法包装成Disposable

更新:Pawel的答案被删除了,所以我在这里添加他的链接:以 编程方式检查Log4Net日志.


Pet*_*old 11

我一直在使用配置了MemoryAppender 的BasicConfigurator.此appender允许您访问测试期间记录的内存中消息.