我想清理一些敏感信息,例如来自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将日志条目刷新到磁盘文件之前有没有办法修改内容?