当前位置: 首页 > 知识库问答 >
问题:

使用Spring AOP清理记录器

池恩
2023-03-14

我们试图在我们的应用程序中引入通用日志记录器,使用Spring AOP来记录处于捕获块下的日志语句。

AOP前

try
{
\\Business Logic 
}
catch(Exception e){
\\some recovery mechanism that won't be generic across different layers
log.error();//These statements needs to be moved to generic logger
}

在阅读了Spring文档之后,我发现这可以使用后面的建议来完成。After throwing advice是在方法通过抛出异常退出时要执行的通知。

为了做到这一点,我们将通过在catch内重新抛出exception来更改现有的异常处理代码,以在后执行建议时阻止类似的操作。

AOP之后:

try
{
\\Business Logic
}
catch(Exception e){
 \\some recovery mechanism that won't be generic across different layers
throw e;
}

AOP代码:

@Aspect
@Sl4j
@Component
public class LoggingAdvice {
    @AfterThrowing(pointcut = "execution (* * com..*(..)", throwing = "e")
    public void myAfterThrowing(JoinPoint joinPoint, Exception e) {    
    log.error("Exception occured",e);
    }
}

您认为除了在catch块中重新引用异常并按照调用层次结构向上传播它,还有比这更好的解决方案吗?

请注意,任何引发的或未检查的异常无论如何都会被AfterThrowingAdtions捕获。.所有我想做的是执行记录器清理通过删除log.error在捕捉块,并有它的通用使用AOP。


共有2个答案

戚飞雨
2023-03-14

更好的方法是删除catch块,因为您将在后面使用@afterhrowing。并在方面执行的基础上实现您想要实现的任何东西。

宋朝
2023-03-14

正如这里所讨论的,@posterhrowing对于记录实际抛出的异常非常有用。

您的情况非常特殊,因为您想要记录正在捕获/处理的异常。如果您在这个用例中使用完整的AbulJ而不是Spring AOP,您可以使用一个处理程序(*)切入点,如本回答中的示例代码所述。它将使您能够从您的cat块中剔除日志语句,而不需要升级(重新抛出)已经正确处理的异常,从而改变您的逻辑,并有必要稍后在其他地方捕获它们。

 类似资料:
  • 问题内容: 我正在编写一个服务器应用程序,该应用程序应该能够在控制台和日志文件上以不同级别登录。 问题是,如果设置了logging.basicConfig(),它将登录到控制台,但是必须在主线程中进行设置。 也可以使用logging.basicConfig(filename =’logger.log’)进行设置以写入文件。 设置用于控制台日志记录(logging.StreamHandler())或

  • MySQL 提供了 DELETE 和 TRUNCATE 关键字来删除表中的数据。本节主要讲解 TRUNCATE 关键字的使用。 TRUNCATE 关键字用于完全清空一个表。其语法格式如下: TRUNCATE [TABLE] 表名 其中,TABLE 关键字可省略。 例 1 新建表 tb_student_course,插入数据并查询,SQL 语句和运行结果如下: 使用 TRUNCATE 语句清空 tb

  • 问题内容: 我正在做一个简单的项目,让我们选择高度安全的网站。我有5个不同的JSP页面。如果我从第一个JSP页面开始,它将重定向到第二个JSP页面,依此类推。同时,它不应该在我的浏览器历史记录中存储这些页面。如何使用JavaScript清除那些浏览历史记录? 问题答案: 您可以尝试使用它来清除历史记录中的最后一个条目,并将其替换为新url的地址吗?从文档历史记录中删除当前文档的URL,这意味着无法

  • 问题内容: 我正在尝试将CS​​V文件读入(字符串的)列表列表,将其传递以从数据库中获取一些数据,构建新数据列表的新列表,然后传递该列表列表,以便写入新的CSV文件。我到处都看了,似乎找不到如何做的例子。 我宁愿不使用简单的数组,因为文件的大小会有所不同,而且我也不知道该如何使用数组的尺寸。我没有处理文件的问题。我只是不确定如何处理列表列表。 我发现的大多数示例都将创建多维数组或在从文件中读取数据

  • 当我试图提取1个表时,我使用AWS Glue从EC2(Postgre)提取要转换的数据,并将其放在S3上。我得到一个错误,如下所示: 有什么我能做的吗?我试图删除null字段或fillna,但这些都不起作用。

  • 主要内容:读者,前提条件,Spring AOP 概述Spring框架的关键组件之一是面向方面编程(AOP)框架。 面向方面的编程需要将程序逻辑分解成不同的部分。 此教程将通过简单实用的方法来学习Spring框架提供的AOP/面向方面编程。 读者 本教程主要是为Spring 面向方面编程(AOP)初学者准备的,帮助他们了解与Spring的AOP框架相关的基础到高级概念。 前提条件 在开始练习本教程系列文章中给出的各种类型的示例之前,我们假设您已经了解