我想构建一个 Appender(或类似的东西)来检查事件并在某些条件下创建日志新事件。
一个示例是 Escalating Appender,它检查是否记录了一定数量的相同事件,如果是,则记录具有更高日志级别的事件。因此,您可以定义如下内容:如果您在此记录器上收到超过 10 个相同的警告,则将其设为错误。
所以我的问题是:
这样的东西已经存在了吗?
Appender 是实现此行为的正确类吗?
您认为我应该注意哪些陷阱?
澄清: 我对收集和分析事件的算法很好。我将使用 appender 中的集合来做到这一点。坚持对于我的目的来说不是必需的。我的问题 #2 是:appender 是执行此操作的正确位置吗?毕竟为 appender 创建日志条目不是正常行为。
最佳答案
你可以通过实现log4j提供的Appender
接口(interface)来创建你自己的appender。
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/Appender.html
那将是一种方法。另一种方法是使用现有的附加程序,然后编写一些代码来监视日志。例如,您可以登录到数据库,然后编写一个进程来监视数据库中的日志条目并根据它看到的内容创建元事件。
这主要取决于您对什么感到满意。您必须处理的一个问题是如何在日志中回顾以创建您的元事件。您要么必须在 appender 中累积事件,要么将它们保存在某个地方,以便您可以查询以构建元事件。累积它们的问题在于,如果您停止并启动您的流程,您要么必须将它们转储到某处以便将它们重新拾起,要么在流程重新启动时重新开始。
例如,假设我想在每第 10 次抛出 NullPointerException
时创建一个日志条目。如果我在某种数据库中有日志条目,每次抛出 NPE 时,我都会运行查询以查看自上次为它们创建日志条目以来抛出了多少 NPE。如果我每次抛出 1 时都在内存中计算它们,如果我在抛出 5 次后重新启动应用程序,如果我不保留该数字,我将失去计数。
关于java - 日志事件的 Log4J 重新路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1207889/