如何解决将代码中的Appender添加到测试根目录-Log4Net
我正在尝试通过测试类中的代码向root
记录器添加自定义附加程序。我已经在名为log4net
的包装器类中配置了Logging.cs
。
这是我的Logging.cs
类的构造函数:
public Logging(Type type)
{
XmlDocument log4netConfig = new XmlDocument();
log4netConfig.Load(File.OpenRead("log4net.config"));
var repo = LogManager.CreateRepository(Assembly.GetEntryAssembly(),typeof(log4net.Repository.Hierarchy.Hierarchy));
XmlConfigurator.Configure(repo,log4netConfig["log4net"]);
log4netLogger = LogManager.GetLogger(type);
LogManager.GetLogger(type);
}
在查看了一些示例之后,我将此代码编码为未完成的测试方法:
[Fact]
public void TestOutput()
{
var appender = new StringAppender();
var logger = new Logging(typeof(TestLibrary));
Hierarchy h = (Hierarchy)log4net.LogManager.GetRepository();
Logger rootLogger = h.Root;
}
但是,GetRepository()
要求一个仓库名称为string
,但我不确定,一般来说,我不知道自己是否在正确的道路上。 / p>
这是自定义附加程序:
public class StringAppender : AppenderSkeleton
{
private string message { get; set; }
protected override void Append(LoggingEvent loggingEvent)
{
message = loggingEvent.RenderedMessage;
}
public string GetMessage()
{
return message;
}
}
解决方法
经过更多的研究和实验,我发现如果您通过LogManager.GetRepository()
Assembly.GetEntryAssembly()
对我有用
工作代码为:
// my custom appender
var appender = new StringAppender();
// my logger wrapper class
var logger = new Logging(typeof(TestLibrary));
// hierachy
Hierarchy h = (Hierarchy)log4net.LogManager.GetRepository(Assembly.GetEntryAssembly());
// get the root logger
Logger rootLogger = h.Root;
// add the appender
rootLogger.AddAppender(appender);
// set the root logger level
rootLogger.Level = Level.Debug;
// log4net via the wrapper class
logger.Debug("Hello,from TestLibrary Class");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。