我扩展了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>
答案 0 :(得分:7)
我认为这会对你有所帮助
答案 1 :(得分:6)
如果您使用的是任何非标准装配体,请将它们与装配体一起放在应用程序目录中。如果这没有帮助,请尝试为您的程序集提供一个强名称,并使用log4net配置文件中的全名。您也可以尝试将其添加到GAC中。
答案 2 :(得分:2)
我认为无法找到装配体。程序集的名称确实是'HTTPAppender'并且它与调用程序集在同一路径中吗?
答案 3 :(得分:1)
我遇到了同样的问题。如果您的自定义附加程序项目使用某个log4net.dll
,并且您要使用自定义附加程序的项目使用不同的log4net.dll
,则无法找到它。
答案 4 :(得分:0)
我也陷入了这个问题,最后我修好了。
解决方案 HTTPAppender 类应该有默认构造函数。
我确信这个错误“无法创建Appender”是因为没有默认构造函数
答案 5 :(得分:0)
我最近遇到了同样的问题。我通过在类型属性的标准名称后加上逗号来添加程序集名称来解决此问题。请参见下面。
<log4net>
<appender name="LogFileAppender" type="TestHarness.Model.CustomRollingFileAppender, TestHarness.Model">
</log4net>