我们需要拦截nlog写入磁盘的条目,以便可以对任何URL / IP地址和类似的安全敏感信息进行模糊处理或以某种方式进行编码。
例如,如果记录的任何URL应该从中转换 http://servername:2212/webservice 至 (HTTP)://服务器/ 2212 / web服务
是否有任何nlog模式需要正则表达式并转换为另一个字符串?
或者是否可以拦截日志文件的写入来实现这一目标?
任何帮助,建议或重定向都会非常有用。
我们使用的是.NET 4.5,nlog 4.4,C#
答案 0 :(得分:1)
编写一个包装器layoutrenderer,可以包装比所有布局渲染器。 。例如如果你有布局${message}${exception}
,它将是
${intercept:inner=${message}${exception}}
代码:
[LayoutRenderer("intercept")]
public sealed class InterceptLayoutRendererWrapper : WrapperLayoutRendererBase
{
/// <summary>
/// Option you could set from config or code
/// </summary>
[DefaultValue(true)]
public bool Option1 { get; set; }
/// <summary>
/// Renders the inner layout contents.
/// OR override TransformFormattedMesssage, and change the stringbuilder (less string allocations)
/// </summary>
/// <param name="logEvent">The log event.</param>
/// <returns>Contents of inner layout.</returns>
protected override string RenderInner(LogEventInfo logEvent)
{
var text = this.Inner.Render(logEvent);
return interceptSomething(text);
}
}
并注册:
LayoutRenderer.Register<InterceptLayoutRendererWrapper>("intercept");