log4net:加载自定义appender时出错

我扩展了AppenderSkeleton以创建一个名为HTTPAppender的自定义appender,但是在xml文件中引用了它 . Log4Net显然无法找到我的自定义appender . 有没有办法从xml文件引用它指向我的项目,或者我是否必须将自定义appender的源代码添加到log4net中,以便将其打包在log4net.dll中?

调试时,我在立即窗口中收到以下错误:

log4net:ERROR XmlHierarchyConfigurator: Could not create Appender [HTTPAppender] of type [HTTPAppender.HTTPAppender,HTTPAppender]. Reported error follows.
System.IO.FileNotFoundException: Could not load file or assembly 'HTTPAppender' or one of its dependencies. The system cannot find the file specified.
File name: 'HTTPAppender'
   at System.RuntimeTypeHandle._GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, Boolean loadTypeFromPartialName)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
...etc

这是xml文件的log4net部分:

<log4net> <appender name="HTTPAppender" type="HTTPAppender.HTTPAppender,HTTPAppender"> <evaluator type="log4net.Core.LevelEvaluator,log4net"> <threshold value="WARN"/> </evaluator> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="#%level - %message" /> </layout> </appender> <root> <level value="ALL" /> <appender-ref ref="HTTPAppender" /> </root> <logger name="log4netErrorLog" > <level value="DEBUG" /> <appender-ref ref="HTTPAppender" /> </logger> </log4net>

回答(5)

2 years ago

如果使用任何非标准程序集,请将它们与程序集一起放在应用程序目录中 . 如果这没有帮助,请尝试为您的程序集提供一个强名称,并使用log4net配置文件中的全名 . 您也可以尝试将其添加到GAC中 .

2 years ago

我会假设无法找到装配 . 程序集的名称确实是'HTTPAppender'并且它与调用程序集在同一路径中吗?

2 years ago

我有同样的问题 . 如果您的自定义appender项目使用某个 log4net.dll ,并且您要使用自定义appender的项目使用不同的 log4net.dll ,它将无法找到它 .

2 years ago

最后我也解决了这个问题 .

解决方案是 HTTPAppender 类应该有一个 Default contructor .

我有信心这个错误 "Could not create Appender" 是因为没有默认构造函数