【问题标题】:log4net: Custom PatternLayoutConverter not being calledlog4net:未调用自定义 PatternLayoutConverter
【发布时间】:2011-03-25 12:34:59
【问题描述】:

情况:我想显示记录消息的代码的方法和行号。问题是我有一个调用 log4net 记录器的中间类。不幸的是,由于现有的架构问题,我无法取消这个中间类。结果是我总是将方法和行号视为在中间类中。不是我想要的。

所以我尝试根据这个问题创建一个自定义 PatternLayoutConverter:

Does log4net support including the call stack in a log message

我也在以编程方式配置 log4net,因为再次出于架构原因,使用 XML 配置文件是不可行的(我还发现配置 log4net 的首选且唯一记录的方式是通过愚蠢的 XML 文件,但这是一个荒谬的另一个讨论的话题)。所以我关注了这个帖子。

How to configure log4net programmatically from scratch (no config)

除了我的自定义转换器从未被调用外,一切正常。这是自定义转换器的代码:

public class TVPatternLayout : PatternLayout {
    public TVPatternLayout() {
        this.AddConverter("logsite", typeof(TVPatternLayoutConverter));
    }
}

public class TVPatternLayoutConverter : PatternLayoutConverter {
    protected override void Convert(TextWriter writer, LoggingEvent loggingEvent) {
        StackTrace st = new StackTrace();
        int idx = 1;
        while(st.GetFrame(idx).GetMethod().DeclaringType.Assembly == typeof(LogManager).Assembly)
            idx++;
        writer.Write(String.Format("{0}.{1} (line {2})", st.GetFrame(idx).GetMethod().DeclaringType.Name, st.GetFrame(idx).GetMethod().Name,
                     st.GetFrame(idx).GetFileLineNumber()));
    }
}

这是我配置记录器的代码:

Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Configured = false;

RollingFileAppender appender = new RollingFileAppender();
appender.Name = loggerName;
appender.File = realPath;
appender.AppendToFile = true;
appender.MaximumFileSize = "8000";
appender.MaxSizeRollBackups = 2;

TVPatternLayout patternLayout = new TVPatternLayout();
patternLayout.ConversionPattern = logFormat;  // includes %logsite, my custom option
appender.Layout = patternLayout;

appender.ActivateOptions();
hierarchy.Root.AddAppender(appender);

hierarchy.Root.Level = Level.All;
hierarchy.Configured = true;

【问题讨论】:

    标签: c# .net logging configuration log4net


    【解决方案1】:

    问题是我忘记在 patternLayout 上调用 ActivateOptions()。当然,我会在写完一个很长的问题后马上弄清楚。

    【讨论】:

      猜你喜欢
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 2015-09-13
      相关资源
      最近更新 更多