【问题标题】:Implementing a custom log4net PatternLayout实现自定义 log4net PatternLayout
【发布时间】:2015-07-26 13:11:48
【问题描述】:

我需要 log4net 来生成一个 CSV 文件并发现了this article that implements one。我的问题是如何将该代码集成到我的网络项目中。直接复制粘贴让 ReSharper 坚持将命名空间从 'CsvLogging' 更改为 'MyApp.Web' 这很有意义,现在 Web 项目的程序集有一个名为“CsvLogging”的类。

但是 log4net 不高兴,抛出下面粘贴的错误。

我的 appender 的配置如下:

<layout type=" MyApp.Web.CsvLogging.CsvPatternLayout, MyApp.Web.CsvLogging">

...根据我对 this article on how to reference a custom pattern 的阅读,应该是正确的。

log4net:ERROR Failed to find type [ MyApp.Web.CsvLogging.CsvPatternLayout, MyApp.Web.CsvLogging]
System.IO.FileNotFoundException: Could not load file or assembly 'MyApp.Web.CsvLogging' or one of its dependencies. The system cannot find the file specified.
File name: 'MyApp.Web.CsvLogging'
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type)
   at System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName)
   at System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark)
   at System.Type.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase)
   at log4net.Util.SystemInfo.GetTypeFromString(Assembly relativeAssembly, String typeName, Boolean throwOnError, Boolean ignoreCase)
   at log4net.Util.SystemInfo.GetTypeFromString(String typeName, Boolean throwOnError, Boolean ignoreCase)
   at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.CreateObjectFromXml(XmlElement element, Type defaultTargetType, Type typeConstraint)

【问题讨论】:

    标签: log4net-configuration log4net-appender


    【解决方案1】:

    您有一个名为 MyApp.Web.CsvLogging 的类,但您的程序集仍命名为 MyApp.Web 请尝试以下操作:

    <layout type=" MyApp.Web.CsvLogging.CsvPatternLayout, MyApp.Web">
    

    基本上.net 对程序集的命名是"namespace.class, assembly"

    【讨论】:

    • 是我尝试过的排列之一。认为它像其他尝试一样失败,因为我信任我的文件系统的大小和时间戳。单击刷新后-我仍在查看较旧的日期和 0 大小。直到我真正打开并找到令人愉悦的预期内容。 [叹气]
    • 嗯,有时你只需要一点橡皮鸭;很高兴这有帮助:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多