我正在使用Log4Net的RollingLogFileAppender以及控制台应用程序中的自定义布局类来打印头部中的一些元数据信息。现在我想将这个自定义布局类打包到一个库中,并告诉log4net使用它。
之前,我成功地使用了以下appender配置:
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<threshold value="DEBUG />
<file value="C:\Logs\MyConsoleApp.log"
type="log4net.Util.PatternString" />
<preserveLogFileNameExtension value="true" />
<datePattern value="_yyyyMMdd" />
<rollingStyle value="Date" />
<appendToFile value="true" />
<staticLogFileName value="false" />
<layout type="MyConsoleApp.MyLogLayout">
<conversionPattern value="%date{ISO8601}|%-5level|%message%newline" />
</layout>
</appender>
然后,我尝试将MyLogLayout类移动到库项目“MyLibrary.MyLogLayout”中,将其导入MyConsoleApp,并尝试更新我的appender代码,如下所示:
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<threshold value="DEBUG />
<file value="C:\Logs\MyConsoleApp.log"
type="log4net.Util.PatternString" />
<preserveLogFileNameExtension value="true" />
<datePattern value="_yyyyMMdd" />
<rollingStyle value="Date" />
<appendToFile value="true" />
<staticLogFileName value="false" />
<layout type="MyLibrary.MyLogLayout">
<conversionPattern value="%date{ISO8601}|%-5level|%message%newline" />
</layout>
</appender>
当尝试运行它时,我得到以下错误:
log4net:ERROR Failed to find type [MyLibrary.MyLogLayout]
System.TypeLoadException: Could not load type [MyLibrary.MyLogLayout]. Tried assembly [log4net, Version=1.2.15.0, Culture=neutral
, PublicKeyToken=669e0ddf0bb1aa2a] and all loaded assemblies
at log4net.Util.SystemInfo.GetTypeFromString(Assembly relativeAssembly, Strin
g typeName, Boolean throwOnError, Boolean ignoreCase)
at log4net.Util.SystemInfo.GetTypeFromString(String typeName, Boolean throwOn
Error, Boolean ignoreCase)
at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(
XmlElement element, Type defaultTargetType, Type typeConstraint)
log4net:ERROR Failed to create object to set param: layout
我已经仔细检查了dll是否在同一文件夹中,并且引用是否按预期工作。奇怪的是,如果我创建一个类
MyConsoleApp.MyLogLayoutChild
那只是继承了一切
MyLibrary.MyLogLayout
引用它一切都是可行的,然而,将这段代码推入库的主要目的是,我不必为我所做的每个项目创建一个新类,尤其是一个除了继承父类之外没有任何逻辑的项目。
log4net是否支持从dll库加载自定义类型,或者我只是做错了什么?