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

Ant*_*ean 7 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的log4net配置很好(我已经检查了log4net debug="true"输出,并且appender 确实有效).我的appender布局是

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

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

2011-03-21 18:10:20,053 [5   ] DEBUG SocketFlusher+<>c__DisplayClass1 - 82 bytes available
Run Code Online (Sandbox Code Playgroud)

我想要它说SocketFlusher,获得这种格式的正确的appender布局是什么?

Ant*_*ean 10

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

private static readonly ILog Log = LogManager.GetLogger(typeof($CLASSNAME$));
Run Code Online (Sandbox Code Playgroud)

您想要在appender模式布局中执行的操作是包括%logger名称模式而不是%class模式.

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