拦截 nlog 中的日志消息

Intercepting log messages in nlog

我们需要拦截 nlog 正在写入磁盘的条目,以便任何 URLs/IP 地址和类似的安全敏感信息都可以被混淆或以某种方式编码。

例如,如果记录了任何 URL,则应从 http://servername:2212/webservice 到 (http)://servername/2212/webservice

是否有任何 nlog 模式可以采用正则表达式并转换为另一个字符串?

或者是否可以通过拦截日志文件的写入来实现?

任何帮助、建议或重定向都会很有帮助。

我们正在使用 .NET 4.5、nlog 4.4、C#

写一个wrapper layoutrenderer,你可以比所有的layout renderer都wrapper。 .例如如果你有 ${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");