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

使用Spring AOP并在日志文件中获取相应的类名

郎和通
2023-03-14

我将Spring AOP用于日志记录。一切都在工作,但在日志中,我只得到了方面类的名称。我希望打印出相应的类名。下面是代码片段。以下代码需要做哪些更改才能满足我的需求。

    logger.info("After executing method : " + joinPoint.getSignature().getName());
    logger.info("***************************************************************************");
}

@Before("execution(* com.app.c2pc..*.*(..))")
public void logBefore(JoinPoint joinPoint) {

    logger.info("***************************************************************************");
    logger.info("Before executing method : " + joinPoint.getSignature().getName());
}

@Around("execution(* com.app.c2pc..*.*(..)) && !execution(* com.app.c2pc.login.LoginController.*(..)) ")
public Object logAround(ProceedingJoinPoint pjp) throws Throwable {

    long start = System.currentTimeMillis();
    Object clazz = pjp.getTarget().getClass().getName();
    String methodName = pjp.getSignature().getName();
    logger.info("Entering Class " + clazz + " With Method Name " + methodName);
    Object[] obj = pjp.getArgs();
    int i = 0;
    try {
        for (Object o : obj) {
            logger.info(++i + " : Parameter Name :" + (null != o ? o.toString() : ""));
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    Object output = pjp.proceed(pjp.getArgs());

    logger.info("Excecution Completed for method : " + methodName + " in Class : " + clazz + " with result "
            + output);
    long elapsedTime = System.currentTimeMillis() - start;
    logger.info("Execution time for method : " + methodName + " in Class : " + clazz + " : " + elapsedTime
            + " milliseconds.");
    return output;
}

@AfterThrowing(pointcut = "execution(* com.app.c2pc..*.*(..))", throwing = "error")
public void logAfterThrowing(JoinPoint joinPoint, Throwable error) {

    logger.info("Exception thrown by method : " + joinPoint.getSignature().getName());
    logger.info("Exception name : " + error);
}

@AfterReturning(pointcut = "execution(* com.app.c2pc..*.*(..))", returning = "result")
public void logAfterReturning(JoinPoint joinPoint, Object result) {

    logger.info("Method : " + joinPoint.getSignature().getName() + " returned value is : " + result);
}

2016-07-20 23:41:20信息日志方面:23-执行后方法:checkSubmitEvalFlag 2016-07-20 23:41:20信息日志方面:方法名为getBackUpUserDetails 2016-07-20 23:41:20 INFO LogginAspect:45-1:参数名:com.app.c2pc.scie.bean.SearchCriteriabean@77EF5B02

共有1个答案

井疏珂
2023-03-14

可以使用“joinpoint.getTarget().getClass().getName()”获得完全限定的类名,如“com.abc.pqr.myClass”

您可以使用“joinpoint.getTarget().getClass().getSimpleName()”只获取类名,比如“MyClass”。

 类似资料:
  • 我使用在文件中配置的logback来管理应用程序的日志。我想: 创建日志文件,这些日志文件在应用程序启动时贴上时间戳,并在应用程序的生命周期内作为单个日志文件保留。(我们可能同时运行一个应用程序的多个实例,或者在一天内运行多个实例,它们可能会运行几天。) 保持干净的日志文件目录,以便删除超过给定期间的日志。 实现第二个建议使用和,如下所示--这将日志文件保存7天。但是,这将使用一个文件来记录给定日

  • 我要把这个日志放进我的日志里 I/zygote:后台并发复制GC释放148531(5MB)AllocSpace对象,18(936KB)LOS对象,32%自由,12MB/18MB,暂停3.758ms总计217.199ms 这是需要解决的问题还是可以忽略的问题

  • 编辑 根据daggett的评论,我有rest API-http://localhost:8080/nifi-api/flow/公告牌,它解决了我的一半问题。现在我需要知道谁可以获得导致公告的flowfile详细信息。

  • 我使用NetBeans7.3在Tomcat上部署WebApplication。当我运行/部署应用程序时,我可以在输出窗口中看到服务器日志和“Apache Tomcat日志”。 但是在我的应用程序中,我用log4j指定了另一个日志文件,仅用于我的应用程序日志。 我怎样才能像直接在NetBeans中看到其他日志输出一样看到我的应用程序的日志呢? 我的log4j有一个附加日志的规范--所以我的类的所有警

  • 问题内容: 是否有可能在运行时使用MDC命名日志文件。 我有一个单独的Web应用程序,该应用程序同时使用tomcat docbase被不同的名称调用。因此,我需要为每个文件设置单独的日志文件。 问题答案: 这可以在Logback(Log4J的后继者)中完成。 Logback旨在作为流行的log4j项目的后继者,从log4j离开的地方接手。 请参阅文档筛选器 SiftingAppender在引用和配