【问题标题】:Stop printing fully qualified class names with log4net停止使用 log4net 打印完全限定的类名
【发布时间】:2018-03-13 23:26:49
【问题描述】:

我有一个带有 log4net 的 C# 项目。 log4net 配置打印每一行的堆栈跟踪详细信息,例如:

<param name="LogPattern" value="[%date] %stacktracedetail{3} %m" />

然而,这使得这些行有点不可读,因为堆栈跟踪会打印每个方法的完全限定类名。就连参数名称都以System为前缀:

[2018-03-14 12:14:02,265] a.b.class1.myMethod(System.String param1, System.Int32 param2) > a.b.class2.myMethod(System.String param1, System.Int32 param2) > a.b.class3.myMethod(System.String param1, System.Int32 param2) logmessage

如何删除完全限定的类名?例如:

[2018-03-14 12:14:02,265] class1.myMethod(String param1, Int32 param2) > class2.myMethod(String param1, Int32 param2) > class3.myMethod(String param1, Int32 param2) logmessage

【问题讨论】:

  • 框架本身只适用于完全限定的类名。使用指令允许编译器推断类名的其余部分,如果它们是明确的。我个人觉得你不应该覆盖这个。或者至少仅适用于非常特定的内置类型(如字符串和 int)并且仅在显示期间。在原始日志中,最好将所有信息至少包含一次。但要查看日志,您可以将“System.String”替换为“String”。一个简单的 Dictionary、一个循环和 String.Replace 就可以完成这个操作。

标签: c# logging log4net log4net-configuration


【解决方案1】:

据我所知,仅通过配置无法做到这一点。但是,如果您真的希望它起作用,我建议您通过扩展您当前使用的任何附加程序(例如log4net.Appender.RollingFileAppender)并覆盖RenderLoggingEvent(TextWriter writer, LoggingEvent loggingEvent) 方法来创建自己的Appender

在您的覆盖方法中,您将要调用基类RenderLoggingEvent(LoggingEvent loggingEvent) 以将事件呈现为字符串。现在您已经获得了字符串,您可以使用正则表达式来删除您不想在日志中看到的任何内容。

类似如下(注意:这只是头代码,它可能无法正常工作,只是为了说明)

public class MySpecialFileAppender : log4net.Appender.RollingFileAppender
{
    protected void RenderLoggingEvent(TextWriter writer, LoggingEvent loggingEvent)
    {
        var rendered = RenderLoggingEvent(loggingEvent);
        var adjusted = AdjustText(rendered);
        writer.Write(adjusted);     
    }

    private string AdjustText(string inputText)
    {
        return "HELLO WORLD!!!";
    }
}

这是一个快速而肮脏的解决方案,因为要正确执行它需要您在现有的 stacktracedetail 转换器的基础上使用 write your own Pattern Layout Converter,该转换器指的是内部的 log4net.Layout.Pattern.StackTraceDetailPatternConverter 类。所以...是的,那会是很多工作。

【讨论】:

    猜你喜欢
    • 2014-02-20
    • 2020-11-12
    • 2014-09-23
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 2021-03-25
    • 2015-08-03
    • 2020-07-14
    相关资源
    最近更新 更多