C# 在nlog中拦截日志消息

C# 在nlog中拦截日志消息,c#,.net,logging,nlog,C#,.net,Logging,Nlog,我们需要截获nlog写入磁盘的条目,以便对任何URL/IP地址和类似的安全敏感信息进行模糊处理或编码 例如,如果记录了任何URL,则应将其转换为 到 (http)://servername/2212/webservice 是否有任何nlog模式需要一个正则表达式并转换为另一个字符串 或者是否可以拦截日志文件的写入以实现此目的 任何帮助、建议或重定向都会非常有用 我们正在使用.NET 4.5、nlog 4.4、C#编写包装器layoutrenderer,您可以包装比所有的布局渲染器都多的布局。e、

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

例如,如果记录了任何URL,则应将其转换为 到 (http)://servername/2212/webservice

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

或者是否可以拦截日志文件的写入以实现此目的

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


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

编写包装器layoutrenderer,您可以包装比所有的布局渲染器都多的布局。e、 g.如果您有布局
${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(“intercept”)]
公共密封类InterceptLayoutRenderWrapper:WrapperLayoutRenderBase
{
/// 
///您可以从配置或代码中设置的选项
/// 
[默认值(真)]
公共bool选项1{get;set;}
/// 
///呈现内部布局内容。
///或重写TransformatedMessage,并更改stringbuilder(减少字符串分配)
/// 
///日志事件。
///内部布局的内容。
受保护的重写字符串RenderInner(LogEventInfo logEvent)
{
var text=this.internal.Render(logEvent);
返回某物(文本);
}
}
并登记:

LayoutRenderer.Register<InterceptLayoutRendererWrapper>("intercept"); 
LayoutRenderer.Register(“intercept”);

另一种方法可以制作使用转换方法“修复”日志文本的渲染包装器。渲染包装器将有一个正则表达式列表,用于匹配日志文本中的文本模式,并在匹配时替换为标准字符串。与之类似,自定义目标包装也是一个选项-它包装完整的目标。但灵活性稍差一些。