使用NLog有没有办法在尾随点之前记录记录器的名称?

时间:2012-06-11 10:41:21

标签: logging nlog

我有一个场景,如果我可以在跟踪点字符之前记录记录器的名称,我可以减少配置文件中的目标数量。

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

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

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

1 个答案:

答案 0 :(得分:4)

我建议编写一个自定义包装器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方法应该接收logger的全名(如果您使用类名作为记录器名称,则为完全限定的类名)。在内部转换中,只需返回“文本”(即记录器名称)的内容,但不包括最后'.'

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

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

我的基础是你可以在NLog repository找到的WrapperLayoutRenderers。

祝你好运!