【问题标题】:How do I Log the Class file without the path in log4net如何在没有 log4net 路径的情况下记录 Class 文件
【发布时间】:2010-11-17 14:47:48
【问题描述】:

我希望能够在我的日志文件中记录类文件和行号,所以我使用以下配置...

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <!--etc-->
   <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%date [%thread] %-5level (%file:%line) %logger => %message%newline" />
  </layout>
</appender>

但是 %file 属性使我的日志文件条目太长而无法舒适地阅读......

2009-08-07 16:41:55,271 [7] INFO  (O:\mystream\aevpallsrv\DotNet\com.mycompany.au\myapp\Myappp\Controller.cs:75) MyApp.Controller => Controller.EnqueueWorkerThreads() - START

有没有办法只显示类文件('Controller.cs')而不是文件的完整路径???

迈克尔

【问题讨论】:

    标签: configuration logging log4net


    【解决方案1】:

    虽然您询问的是文件名,但我相信您可以使用 %type 来获取完全限定的类型名称 (a.b.className)。如果您只需要类名,请使用 %type{1}

    请注意,任何生成调用者信息(%file 和 %type)的方法都有与之相关的性能成本。

    顺便说一句,您可以通过使用类型名称命名 Logger 来绕过性能损失。

    namespace MyNamespace
    {     
        public class Foo
        {
            private static ILog log = LogManager.GetLogger(typeof(Foo));
        }
    }
    

    您的转化模式如下所示:

    "%date [%thread] %-5level %logger %message"
    

    您的记录器将是“MyNameSpace.Foo”。同样,如果您只需要类名,请使用“%logger{1}”,它将解析为“Foo”。

    这种方法的最大优势之一是您可以利用 log4net 的分层存储库系统来调整每种类型的日志记录级别:

    <!-- all classes in MyNamespace are warn -->
    <logger name="MyNamespace">
         <level value="WARN" />
    </logger>
    
    <!-- only Foo is in debug -->
    <logger name="MyNamespace.Foo">
        <level value="DEBUG" />
    </logger>
    

    【讨论】:

    • 我没有尝试过,但我想知道 %file{1} 的工作方式与 %type{1} 的工作方式相同吗?
    • 感谢布莱恩。我使用类型名称作为记录器名称,这可以正常工作。我发现类和行号信息无论如何都不适用于我的“发布”配置文件(我没有发布 pdb 文件),所以我完全跳过这些以用于我的生产版本。
    【解决方案2】:

    开箱即用,PatternLayout 仅支持 %file 标记。你可以做的是继承 PatternLayout 并添加你自己的模式,比如 %filename,并且对于这个标记只输出文件的名称。

    【讨论】:

    • 谢谢彼得,我真的不想在 Log4Net 中搞砸子类化,但我想我会试一试。当我在那里时,我可能会尝试自定义 RollingLogFileAppender 的 stoopid 文件命名选项。
    • 去吧。将您自己的模式添加到 Patternlayout 中实际上很容易......让我们都知道它是怎么回事。
    猜你喜欢
    • 2019-03-29
    • 2014-01-21
    • 1970-01-01
    • 2012-07-04
    • 2021-09-08
    • 2015-12-25
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    相关资源
    最近更新 更多