按照设计,如果无法正确配置(http://log4net.sourceforge.net/release/1.2.0.30316/doc/manual/faq.html#reliable),Log4net只会向控制台输出消息。
日志记录是我的应用程序的关键部分,因此想知道Log4net是否配置正确。我无法找到任何方法从Log4net获取信息,所以我写了这段代码。但我根本不喜欢这个策略。 还有更好的建议吗?
TextWriter errorConsole = new StringWriter();
TextWriter defaultErrorConsole = Console.Error;
Console.SetError(errorConsole);
try
{
//configure Log4net
string errorMessage = errorConsole.ToString();
bool initializationError = errorMessage.IndexOf("log4net", StringComparison.OrdinalIgnoreCase) == -1;
if (initializationError)
{
throw ...
}
}
finally
{
Console.SetError(defaultErrorConsole);
}
同样在记录消息时,例如调用ILog.Error。有没有办法看看它是否被记录?
答案 0 :(得分:1)
配置期间发生的任何错误都会使用the log4net.Util.LogLog class在log4net内部记录。不幸的是,在当前版本中,这个类并没有暴露很多可以帮助你的东西。另一方面,在the current source中,您现在可以订阅LogReceived事件,只要收到内部日志消息就会触发该事件。
logger存储库也使用ILoggerRepository.ConfigurationMessages()方法进行了扩展,该方法公开了最新的内部消息列表。
关于监视是否记录了消息:appender,至少是在AppenderSkeleton类上构建的appender,使用与配置期间使用的相同的内部错误消息。因此,使用最新的源代码,您将通过LogReceived事件收到任何此类通知。