我有一个JPA事务,如下所示(使用控制器通知来捕获异常)
@Transactional
public void save(MyObj myObj) {
// Attempt to save the object
this.myRepo.save(myObj)
// After it saves, call my audit log service to record the change
this.myAuditLogService.logChange(myObj)
}
工作正常,但问题是如果保存失败并引发异常,它仍然调用审计日志服务,然后抛出异常。导致创建错误的审计条目。
期
有没有带异常分组功能的日志解决方案?我想要实现的是当某个异常被记录时,例如,在10秒内记录100次,我不想记录100个堆栈跟踪。我想记录像RuntimeException was thrown 100 times: single stack trace here这样的东西。如果能与log4j集成,那就太完美了。
Ofc有一个选项,可以在里面创建一些带有异常队列的日志外观,但可能已经实现了一些东西。
我一直在使用Python中一些基于文件的流,并且注意到当流的底层文件被删除时(例如,write、close、writable)不会引发异常(例如,每次调用os.remove() )。
在查看了标准库文档之后--没有任何内容专门提到如果流的底层文件被删除,这些方法将如何运行--但我观察到的行为似乎不直观。例如,可以想象,应用程序认为自己已经成功地将关键信息写入日志文件的情况--但实际上日志文件已经被删除,应用程序不知道已经不存在了,因为没有引发异常。
下面是一些说明此行为的示例代码。我使用Python3.10.7来执行它。
import os
from os.path import exists
我使用简单的System.out.printf / System.out.println语句来执行JBoss日志记录(我正在部署到JBoss EAP6.2)。我注意到,当异常发生时,我倾向于在抛出异常之前丢失println消息。这使得无法调试异常。
为了验证这一点,我在WAR中输入了以下代码:
System.out.println("foo");
int i = 0; if (i==0) throw new RuntimeException();
...
( int i = 0; if (i==0)部分只是让编译器保持沉默,否则编译器就会抱怨)
实际上,在执行此代码时,在