gpt4 book ai didi

java - 用于在 Spring boot Java 中记录每个请求的 Apt 设计模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:26 24 4
gpt4 key购买 nike

我正在为我的 spring boot 应用构建一个审计日志。我想在数据库中跟踪每个 POST 请求 到我的网络服务器(甚至失败)。我的审计代码弄乱了我的 Controller 。有人可以建议一个合适的设计模式,使其简洁、通用和可维护。

@JsonView(View.Student.class)
@PostMapping("/updateStudent")
public Student updateStudent(@Valid @RequestBody final Student studentConfig) {

Student oldStudentDefn =
repository.findById(studentConfig.getStudentId())
.map(Function.identity()).orElse(null);

final AuditBuilder builder = aAuditBuilder().withAction("UPDATE")
.withSource("GUI")
.withBeforeObj(oldStudentDefn)
.withAfterObj(studentConfig);

try{
if(repository.save(studentConfig)) {
builder.withStatus("Success");
} else {
throw new ApplicationException(" Student Save failed");
}
}catch(ApplicationException e) {
builder.withStatus("Failure");
throw e;
}

finally {
auditService.save(builder.build());
}

}

我想重构它,这样每个端点的重复 try-catch 构建器 进入一个公共(public)服务,它足够通用,可以接受任何类型的对象,这样即使 Teacher、Section、ProgressReport 等端点也可以通过调用相同的服务来审计,但它不应该有任何代码重复。

最佳答案

使用 Spring Boot,您很可能会嵌入一个 servlet 容器。您可以使用 servlet 容器设施,而不是自己开发此功能,例如Tomcat has access log可配置 AccessLogValve .输出日志文件,然后转换并导入到数据库中应该就足够了。

如果您需要更实时的解决方案,您可以查看类似 Jaeger 的监控库或 Micrometer .

要点是,除非您有非常具体的要求,否则有比编写自己的代码更容易获得此功能的方法。

关于java - 用于在 Spring boot Java 中记录每个请求的 Apt 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54160401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com