c# - 我可以让 log4net 附加真实的类名而不是生成的闭包类名吗?

标签 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 does 工作)。我的 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,获得这种格式的正确 appender 布局是什么?

最佳答案

您希望类名 出现在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>

关于c# - 我可以让 log4net 附加真实的类名而不是生成的闭包类名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5706223/

相关文章:

c# - 如何使用 javascript 自动单击 dhtml 模态对话框窗口按钮?

c# - 方法 'xxxxx' 没有重载需要 8 个参数

c# - 当使用可执行文件的完整路径,以管理员身份运行时,Windows 10 无法访问指定的设备、路径或文件

c# - 获得类型推断的聪明方法?

c# - 为什么在 C# 中,在默认情况下切换循环中需要 break?

.net - 使用 common.logging 动态设置 log4net 属性

c# - 如何创建私有(private)的非全局记录器

c# - log4Net 困境

log4net - 使用 log4net 处理日志消息中嵌入的换行符

asp.net - Orchard CMS 如何进行日志记录?