我可以获取log4net来附加真实的类名而不是生成的闭包类名吗?

时间:2011-04-18 16:56:00

标签: c# log4net

我有一个从匿名方法登录的类。我把它愚蠢到了重点......

public class SocketFlusher
{
    private static readonly ILog Log = LogManager.GetLogger(typeof(SocketFlusher));

    public void Flush()
    {
        Wait.For(timeout, () => 
        {
            ... // work
            Log.DebugFormat("{0} bytes available", socket.Available);
        }
    }
}

我的log4net配置很好(我已经检查了log4net debug="true"输出,而appender 确实工作)。我的appender布局是

  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%-4thread] %-5level %class{1} - %message%newline"/>
  </layout>

但是,我的日志输出中有一个疯狂的自动生成的静态类。

2011-03-21 18:10:20,053 [5   ] DEBUG SocketFlusher+<>c__DisplayClass1 - 82 bytes available

我希望它说SocketFlusher,获取此格式的正确的追随者布局是什么?

1 个答案:

答案 0 :(得分:10)

您希望类名出现在appender输出中。你正在遵循log4net的惯用法,即将你的记录器命名为类的名称......

private static readonly ILog Log = LogManager.GetLogger(typeof($CLASSNAME$));

您希望在appender模式布局中执行的操作是包含%logger名称模式而不是%class模式。

<layout type="log4net.Layout.PatternLayout">
  <conversionPattern value="%date [%-4thread] %-5level %logger{1} - %message%newline"/>
</layout>