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

标签 java spring logging aop auditing

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

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

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

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

我们当前的方法是有效的,但它使代码变得困惑,因为方法正在执行日志记录和审核,而不是仅仅专注于主逻辑。

最佳答案

您应该考虑的免费开源工具是 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 调用的良好审计和指标。例如,您将能够获取执行时间、被调用过程的输入和输出参数、提供给任何语句的参数。

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

关于java - 在 spring 和数据库中记录或审计有两个目的:方法、任务和作业花费了多少时间,并存储计算以用于审计调试目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35537185/

相关文章:

java - 条件事件处理程序

.net - 使用 spring.NET 配置静态属性

java - 为什么 log4j2 中有这么多 jar?

Spring SFTP 出站适配器 - 确定文件何时发送

java - 更改在测试中注入(inject)的 @Component

php - 如何重定向通过 screen -d -m 调用的 PHP 进程的 STDOUT?

java - 减少 catalina.out 中 log4j 的日志

java - Quartz CronTrigger 未在指定的 startAt() 时间触发

java - 如何使用 CCRC 获取旧文件版本?

java - Appium - 在两个物理设备上运行测试