在刷新到磁盘之前修改log4net内容

时间:2013-12-17 05:32:18

标签: c# log4net

我想清理一些敏感信息,例如来自URL和HTTP标头的“xauth_password”,因此我设法在下面编写自定义过滤器:

public class SanitizeLogContentFilter : FilterSkeleton
{
    public override FilterDecision Decide(LoggingEvent loggingEvent)
    {
        if (loggingEvent.RenderedMessage.IndexOf("x_auth_password", StringComparison.InvariantCultureIgnoreCase) != -1)
        {
            // Sanitize XAuth password from URL
            var sensitiveMsg = Regex.Replace(loggingEvent.RenderedMessage, "x_auth_password.*?&", "x_auth_password=******");
            // Sanitize XAuth password from HTTP Header
            sensitiveMsg = Regex.Replace(sensitiveMsg, "x_auth_password.*?\n", "x_auth_password: ******");
            using (TextWriter textWriter = new StringWriter(new StringBuilder(sensitiveMsg)))
            {
                loggingEvent.WriteRenderedMessage(textWriter);
            }

            return FilterDecision.Neutral;
        }

        return FilterDecision.Neutral;
    }
}

我知道“loggingEvent.WriteRenderedMessage”意味着将当前日志条目写入流,它不会修改内容,“loggingEvent.RenderedMessage”是一个只读的属性。

那么在log4net将日志条目刷新到磁盘文件之前有没有办法修改内容

0 个答案:

没有答案