【问题标题】:logging at package level using spring AOP使用 spring AOP 在包级别进行日志记录
【发布时间】:2015-08-18 07:48:39
【问题描述】:

我正在尝试使用 spring AOP 为我的应用程序实现日志记录和异常框架。我已经为 ApplicationContext 中的类定义了 bean,并使用拦截器来记录进入、退出和异常(如果有)。

我的查询是:我是否需要为我的 ApplicationContext 中的每个类创建 bean,或者是否可以在包级别对其进行概括。如果我的包中有 30 个类,我应该在我的 AppContext 中创建 30 个 bean,如果可能的话,我更愿意在包级别进行。请在这方面帮助我。

【问题讨论】:

    标签: spring spring-mvc exception-handling spring-aop error-logging


    【解决方案1】:

    您需要使用@Around 建议。这里定义切入点,使得包的每个类和方法都被覆盖/拦截。请参阅下面的示例 -

    @Aspect
    public class AllMethodLogging {
    
    @Around(execution("* com.x.y..*.*(..)"))
    public Object intercept(ProceddingJoinPoint pjp){
    
        String name = pjp.getSignature().getName();
        try {
            logger.info("started " + name);
            Object obj = pjp.proceed();
            logger.info("finished " + name + " successfully"); 
            return obj;
        } catch (Throwable t) {
             logger.error(name + " finished with Exception - " + t.getMessage());
             throw t;
        } finally {
            // do some more logging if required else skip
        }       
    }
    }
    

    切入点execution("* com.x.y..*.*(..)") 意味着com.x.y 包及其子包中的任何方法,所有可见性都应被此通知拦截。

    有关更多示例,请参阅文档here,以根据您的需要自定义切入点。

    【讨论】:

    • 出于一些愚蠢的原因,我没有使用 aspectj,即使我不同意但必须遵循。
    • 那很糟糕:(希望我能在这里帮助你......祝你好运!
    猜你喜欢
    • 2012-11-04
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2012-09-30
    • 2011-04-05
    相关资源
    最近更新 更多