如何使用Spring AOP强制使用通用日志格式。想要附加一个字符串,例如每个记录器中的服务名称

时间:2018-11-26 15:41:00

标签: java spring aspectj spring-aop

在下面的示例中进行了尝试,但不适用于spring。在编辑器中出现“ Spring不支持调用切入点指定符”的错误提示。

https://dzone.com/articles/enforcing-common-log-format

任何代码示例都将不胜感激。

3 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点,这里是1。

1)创建注释以添加到需要添加日志记录的类/方法:

@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecution {    
}

2)创建一个方面来进行日志记录:

@Aspect
@Component
public class LogAspect {

    private List<String> messages = new ArrayList<>();

    @Around("@annotation(hello.LogExecution)")
    public Object handelLogging(ProceedingJoinPoint joinPoint) throws Throwable {

        Object proceed = null;
        try {
           // log before
           proceed = joinPoint.proceed();
           // log after
        }
        catch (Exception e) {
           // log exception
           throw e;
        }
        return proceed;
    }    
}

工作示例here

答案 1 :(得分:0)

听起来您没有正确配置AspectJ。

有关正确设置,请参见此问题的答案:

Spring + AspectJ weaving for java 8 using aspectj-maven-plugin

在那之后,spring应该认识到您的切入点

答案 2 :(得分:0)

如手册所述,在Spring应用程序中使用AspectJ的规范方法是使用AspectJ load-time weaving (LTW)。将代码织入Spring或Java EE二进制文件并创建新的JAR等是没有意义的,因此,如果要定位第三方代码,则IMO源代码或二进制编译时织法不是一种选择。相反,我在上面的手动章节中介绍了动态Java编织代理。

话虽如此,这只是对我在此处阅读的与AOP相关的建议的答复。它将按照我描述的方式工作,但是我很高兴OP通过映射诊断上下文解决了他的问题。