我正在尝试将大型应用程序从使用Trace
类转换为通过log4net
. 因此,我编写了一个自定义TraceListener
来将输出重定向到 log4net 的消息中(受这篇文章的启发)。
public class Log4netTraceListener : TraceListener
{
private static readonly ILog logger = LogManager.GetLogger("Log4netTraceListener"); // Line 19
public Log4netTraceListener() { /* nothing special */ }
public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message)
{
// some switching based on the TraceLevel, but eventually something like:
logger.Error(message);
}
}
控制台应用解决方案是三个项目:
- RunShipOrder - 作为应用程序入口点的控制台项目
- ShipOrderAPI - 一个包含与此流程相关的所有代码的类库项目
- CodeLibrary - 一个包含许多项目通用代码的类库项目。
- Log4netTraceListener 在这个项目中
在RunShipOrder
项目内部,我可以调用LogManager.GetLogger("Log4netTraceListener")
,它按预期工作。但是,如果我尝试对其调用方法,Trace
则会引发异常。我已将其追溯到LogManager.GetLogger("Log4netTraceListener")
对类内部的初始调用Log4netTraceListener
。
抛出的异常是ConfigurationErrorsException
,内部异常为TypeInitializationException
,内部异常为NullReferenceException
。最里面的异常的堆栈跟踪是:
at log4net.Core.LoggerManager.GetLogger(Assembly repositoryAssembly, String name)
at log4net.LogManager.GetLogger(Assembly repositoryAssembly, String name)
at log4net.LogManager.GetLogger(String name)
at CodeLibrary.Diagnostics.Log4netTraceListener..cctor() in Log4netTraceListener.cs:line 19
关于从 log4net 代码库中可能引发此异常的任何想法?