5

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

调试时在立即窗口中出现以下错误:

log4net:ERROR XmlHierarchyConfigurator: 无法创建类型为 [HTTPAppender.HTTPAppender,HTTPAppender] 的 Appender [HTTPAppender]。报告的错误如下。
System.IO.FileNotFoundException:无法加载文件或程序集“HTTPAppender”或其依赖项之一。该系统找不到指定的文件。
文件名:'HTTPAppender'
   在 System.RuntimeTypeHandle._GetTypeByName(字符串名称,布尔 throwOnError,布尔 ignoreCase,布尔反射,StackCrawlMark 和 stackMark,布尔 loadTypeFromPartialName)
   在 System.RuntimeTypeHandle.GetTypeByName(字符串名称,布尔 throwOnError,布尔 ignoreCase,布尔反射,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>

4

6 回答 6

8

我想这会对你有所帮助

http://weblogs.asp.net/tgraham/archive/2007/05/02/loading-the-assembly-for-a-custom-log4net-appender.aspx

于 2011-07-18T08:16:56.600 回答
6

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

于 2010-01-22T12:09:22.407 回答
2

我会假设找不到该程序集。程序集的名称确实是“HTTPAppender”吗?它与调用程序集的路径是否相同?

于 2010-01-22T10:20:48.807 回答
1

我有同样的问题。如果您的自定义 appender 项目使用了某个log4net.dll,而您将使用自定义 appender 的项目使用了另一个log4net.dll,它将无法找到它。

于 2014-09-20T12:36:47.280 回答
0

我也陷入了这个问题,最后我解决了。

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

我相信这个错误“无法创建 Appender”的出现是因为没有默认构造函数

于 2017-03-16T17:15:26.117 回答
0

我最近遇到了同样的问题。我通过在类型的完全限定名称之后添加程序集名称并在类型属性中使用逗号来修复它。请看下文。

<log4net>
    <appender name="LogFileAppender" type="TestHarness.Model.CustomRollingFileAppender, TestHarness.Model">
 </log4net>
于 2019-04-22T17:08:09.430 回答