拦截nlog

时间:2017-05-18 04:42:54

标签: c# .net logging nlog

我们需要拦截nlog写入磁盘的条目,以便可以对任何URL / IP地址和类似的安全敏感信息进行模糊处理或以某种方式进行编码。

例如,如果记录的任何URL应该从中转换 http://servername:2212/webservice 至 (HTTP)://服务器/ 2212 / web服务

是否有任何nlog模式需要正则表达式并转换为另一个字符串?

或者是否可以拦截日志文件的写入来实现这一目标?

任何帮助,建议或重定向都会非常有用。

我们使用的是.NET 4.5,nlog 4.4,C#

1 个答案:

答案 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");