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

方法内部日志的Spring AOP捕获

姬捷
2023-03-14
public void test(int x) {
       :
       x++;
       logger.info("This is a test" + x);
       :
       try {
                   :
       } catch (Exception e) {
           throw new ...
       }
       :
}

捕获日志的旧方法如上图所示。以下是我的问题:

>

  • 如果我使用Spring AOP实现上述方法,这个记录器将被删除,但是Spring AOP是否能够捕获这个日志消息?(据我所知,Spring AOP不查看方法内部)

    如果第1)条的答案是肯定的,那么如何做到?

    我假设在实现Spring AOP之后,上面的代码应该是这样的。记录器调用不再在测试方法中,因为它将由方面类处理。这不正是AOP的目的吗?从对象中移除横切关注点(因为它与对象的实际服务无关),并由方面类来处理?

    public void test() {
    
           :
           try {
                       :
           } catch (Exception e) {
               throw new ...
           }
           :
    }
    

    如果Spring AOP不能做到这一点,那么AOP还有什么意义呢?

  • 共有1个答案

    席兴平
    2023-03-14

    我很难理解你在这里的要求。总的来说,我不知道“在方法中捕获日志”是什么意思,但我想我无论如何都可以提供一些帮助。

    在我看来,您想要任意地将代码插入方法中的随机点,而不一定是在方法的开头或结尾。一般来说,Spring AOP不能做到这一点,而且我不确定AspectJ是否能够提供任何帮助,但我不太熟悉这一点,无法给您一个明确的答案。

    正如您所说的,Spring AOP可以在代码库中的各种连接点之前/之后/周围注入。这些连接点将是方法,并且仅在Spring托管类中。

    代码:

    public void test() {
        System.out.println("I am in a method now");
    }
    

    方面:

    @Around("execution(public * *(..))")
    public void publicMethods(ProceedingJoinPoint pjp) {
        System.out.println("before in an aspect");
        pjp.proceed();
        System.out.println("after in an aspect");
    }
    

    这实际上将初始方法转换为以下方法(以及将这些system.out添加到所有公共方法中):

    public void test() {
        System.out.println("before in an aspect");
        System.out.println("I am in a method now");
        System.out.println("after in an aspect");
    }
    
      null
     类似资料:
    • 问题内容: 如何在页面评估中进行console.log记录,将其传递给节点并在页面评估 期间 使用它? 我实际上想记录页面的进度。评估到控制台并向用户显示一些结果。 问题答案: **已更新,可与puppeteer v1.4.x一起使用 如果您只想“记录页面进度,请评估到控制台”,则只需 和使用在像往常一样,不需要更多的依赖关系。

    • 我需要捕获私有的内部调用方法。 然而,却始终得不到建议。我该怎么解决呢? 我也尝试过这个切入点: 和建议:

    • 问题内容: 请看下面的代码: 在上面的代码中,在方法ModifyList()中声明的匿名内部类的实例能够访问传递给该方法的参数。AFAIK Java为内部类创建一个单独的字节码文件。 谁能解释一下Java在字节码级别上如何处理这些局部变量绑定?我的意思是,Java如何精确跟踪对作为参数传递给该方法的对象的引用? 任何帮助将不胜感激! [抱歉我的英语不好! 如果您理解我的问题,请编辑这篇文章,并删除

    • 我正在将grails 2.5.4应用程序中的log4j依赖项从1.2.17升级到最新版本2.17.1 我从BuildConfig.groovy中排除了log4j,并添加了与v2.17.1相关的以下依赖项: log4j api log4j核心 log4j-1.2-api log4j-slf4j-impl 我用的是log4-1。x桥接以减少总体代码基更改。 我添加了以下log4j2。conf目录下的属

    • 本文向大家介绍Python pyinotify日志监控系统处理日志的方法,包括了Python pyinotify日志监控系统处理日志的方法的使用技巧和注意事项,需要的朋友参考一下 前言 最近项目中遇到一个用于监控日志文件的Python包pyinotify,结合自己的项目经验和网上的一些资料总结一下,总的原理是利用pyinotify模块监控日志文件夹,当日志到来的情况下,触发相应的函数进行处理,处理

    • 主要内容:Logger日志方法的例子,Logger的日志方法Logger 类有多种方法来处理日志记录活动。Logger 类不允许我们实例化一个新的 Logger 实例,但它支持两种获取 Logger 对象的静态方法: 两个方法中的第一个返回应用程序实例的根记录器,它没有名称。 任何其他命名的 Logger 对象实例都是通过传递记录器的名称由第二种方法获得的。记录器的名称可以是您传递的任何字符串,通常是类或包名称,如下所述: Logger日志方法的例子 Lo