【问题标题】:Using NLog is there any way to log the name of the logger before the trailing dot?使用 NLog 有没有办法在尾随点之前记录记录器的名称?
【发布时间】:2012-06-11 10:41:20
【问题描述】:

如果我可以在尾随点字符之前记录记录器的名称,我可以减少配置文件中的目标数量。

使用${logger:shortName=true} 可以呈现记录器的短名称,即定义为the part after the trailing dot character。但是我要记录的是点字符之前的部分。

例如,我可能使用 MyNamespace.MyClass 的记录器名称,使用 ${logger:shortName=true} 我会得到 MyClass 的值,但我看不到只有 MyNamespace 的值的方法,因为使用 ${logger:shortName=false} 返回MyNamespace.MyClass的全名。

所以我想知道这是否可能?

【问题讨论】:

    标签: logging nlog


    【解决方案1】:

    我建议编写一个自定义包装器 LayoutRenderer,如下所示:

    using NLog.Config;
    using NLog.LayoutRenderers;
    
    namespace NLog.LayoutRenderers.Wrappers
    {
        [LayoutRenderer("loggerprefix")]
        [ThreadAgnostic]
        public sealed class LoggerPrefixRendererWrapper : WrapperLayoutRendererBase
        {
            protected override string Transform(string text)
            {
                return text.Substring(0,text.LastIndexOf('.'));
            }
        }
    }
    

    这个想法是你可以像这样将这个包装器应用到logger LayoutRenderer:

    ${loggerprefix:${logger}}
    

    Transform 方法应该接收记录器的全名(如果您使用类名作为记录器名称,则为完全限定的类名)。在 Transform 中,只需将“文本”的内容(即记录器名称)返回到但不包括最后一个 '.'

    您还必须在 NLog 配置中添加对程序集的引用。

      <extensions>
        <add assembly="MyAssembly"/>
      </extensions>
    

    我基于您可以在 NLog repository 中找到的 WrapperLayoutRenderers。

    祝你好运!

    【讨论】:

    • 感谢它让我走上正轨,只需要一些调整。我添加了一个包含完整编译和工作示例的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    相关资源
    最近更新 更多