Log4Net:如何从库中指定FileAppender布局类型?

时间:2016-12-16 17:50:24

标签: c# log4net log4net-appender

我正在使用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类移动到库项目&#34; MyLibrary.MyLogLayout&#34;,将其导入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类并引用它,一切正常,但将此代码推送到库中的主要目的是让我不要#39; t必须为我创建的每个项目创建一个新类,特别是除了从父类继承所有内容之外没有任何逻辑的类。

log4net是否支持从dll库加载自定义类型,或者我只是做错了什么?

1 个答案:

答案 0 :(得分:3)

它不起作用,因为TypeLoader不知道在哪里找到你的类。您需要通过指定完全限定的类型名称来帮助它。 喜欢

<layout type="MyLibrary.MyLogLayout, MyLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">