在 spring 和数据库中记录或审计用于 2 个目的,方法、任务和作业花费了多少时间,还存储用于审计调试目的的计算

log or Audit in spring and database for 2 purposes how much time a method, task and job took and also store caclulations for audit debug purpose

我们的应用程序使用 java / sql 服务器。 我们有使用 sprint 批处理的 ETL 作业(不同的上游大约有 35 个)。一些代码在 java 中,一些在数据库中。我们想从数据库跟踪作业的生命周期。例如。作业何时开始,何时调用特定组件,何时调用方法/存储过程以及花费了多少时间。目的是进行健康检查哪个组件花费了更多时间,以防某些存储过程在生产中花费大量时间我们应该能够查询数据库。此外,我们还希望存储中间计算以用于审计和调试目的。

除了正常的应用程序日志记录之外,还会存储时间跟踪和中间计算。

我们目前实施的解决方案是数据库中的规范化表(例如作业、任务、状态等),我们为其存储了过程包装器,然后还有 java 类 来调用这些表存储过程。

我们并没有重新设计我们的应用程序,因此想检查跟踪此类信息的最佳方法是什么。面向对象?但我相信通常在我们要存储的中间计算之前和之后被调用?

我们当前的方法是可行的,但它使代码混乱,因为方法正在执行日志记录和审计,而不是仅仅专注于主要逻辑。

切面是将时序代码隔离在一个地方的一种很好的方式。

存储过程对我来说似乎没有必要。一个简单的 SQL INSERT 应该可以解决问题。如果您使用存储过程作为接口来向用户隐藏模式,那很好,但我怀疑这个 table 会发生很大变化。

日志记录、计时和审计是面向方面编程的"hello world"。

您应该考虑的免费开源工具是 Jamon,它是一个全面的监控框架,提供了许多有用的功能:

JAMon allows developers to track their applications performance and behavior using predefined modules. There are modules that automatically monitor : SQL, HTTP page requests, Spring beans, method invocations, Log4j, and Exceptions. Other modules are often easy to build. JAMon keeps track of the following metrics for any of the items it tracks in the modules: hits, total, average, min, max and concurrency (average, max, current/active) to name a few.

现在关于存储计算,我建议将您的方法分解为更小的子方法,然后使用 AOP 或任何其他工具来捕获返回值并对这些数据执行您想要的任何操作。

此外,如果您需要了解有关数据库层的更多详细信息,我建议您使用 log4jdbc,这将为您提供有关 jdbc 调用的良好审计和指标。例如,您将能够获取执行时间、调用过程的输入和输出参数、提供给任何语句的参数。

您甚至可以扩展此工具以提供自定义行为(仅审核某些程序,对收集的数据执行特定操作。