我有一个场景,如果我可以在尾随点字符之前记录记录器的名称,我可以减少配置文件中的目标数量。
使用${logger:shortName=true}
它可以呈现记录器的短名称,即根据定义在尾随点字符之后的部分。但是我想记录的是点字符之前的部分。
例如,我可能使用记录器名称MyNamespace.MyClass
,使用${logger:shortName=true}
我会得到一个值,MyClass
但我看不到获取值的方法,就像MyNamespace
使用${logger:shortName=false}
返回 的全名一样MyNamespace.MyClass
。
所以我想知道这是否可能?
我建议编写一个自定义包装器 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('.'));
}
}
}
Run Code Online (Sandbox Code Playgroud)
这个想法是你可以logger
像这样将这个包装器应用到LayoutRenderer 上:
${loggerprefix:${logger}}
Run Code Online (Sandbox Code Playgroud)
Transform 方法应该接收记录器的全名(在您使用类名作为记录器名称的情况下,完全限定的类名)。在 Transform 内部,只需返回“text”(即记录器名称)的内容,直到但不包括最后一个'.'
.
您还必须在 NLog 配置中添加对程序集的引用。
<extensions>
<add assembly="MyAssembly"/>
</extensions>
Run Code Online (Sandbox Code Playgroud)
我基于您可以在NLog 存储库中找到的 WrapperLayoutRenderers 。
祝你好运!
归档时间: |
|
查看次数: |
1344 次 |
最近记录: |