2013-02-12 51 views
3

在我们的应用中的一些异常消息包含证书/私钥或其他敏感信息不应该使其进入错误日志。我想在写入之前过滤日志消息的内容,以便已知的敏感值和/或模式可以用[redacted]或某些此类文本值替换。一些搜索没有发现任何东西。有没有办法做到这一点,并以通用的方式将其应用于所有配置的appender?如何编辑来自log4net的敏感信息?

我不希望有通过了解可能发生的所有这些异常,写异常处理程序用于此目的进行过滤。异常不会被我们的代码抛出,所以“不这样做”不是一种选择。

+0

你有没有考虑写一个自定义log4net的过滤器?也许它基于StringMatchFilter?我不确定过滤器是否可以更改输出,但您至少可以使用它来过滤日志中的条目。 – sisve 2013-02-12 20:52:25

+0

我觉得过滤器是用来包含/排除整个事件,而不是过滤内容。在那里也有有用的信息,我只想扼杀顽皮的位 – jlew 2013-02-12 21:05:20

回答

1

很简单:不要把它们放在那里摆在首位。

当然,你可以做一些正则表达式和启发式等,并定期对您的日志运行它们 - 所有这些会容易出现故障或破坏。

,也没有任何理由在日志中的密码和私钥

+0

我永远不会这样做。这些不是我的应用程序的例外情况,它们是从第三方库中抛出的。 – jlew 2013-02-12 20:40:47

+0

如果是这种情况,只需跳过在敏感点处记录整个异常。无论你做什么,确保敏感信息永远不会到达日志文件,而不是稍后尝试对其进行修改 – 2013-02-12 20:43:15

+0

那么,这就是目标。我宁愿在log4net级别上做一些事情来安装过滤器,而不是试图在代码中找到所有可能发生的地方。 – jlew 2013-02-12 21:04:22

0

我希望(但还没有尝试过),你可以写一个基于该sample here一个BufferingAppender和可使用的方法override protected void Append(LoggingEvent loggingEvent)到更改logingEvent以删除敏感信息。

+0

谢谢,将考虑到这一点。我希望有一些可以统一应用于多个现有的appender,但我失去了希望。 – jlew 2013-02-13 13:31:26