Java 如何使用自定义消息记录jpa查询?

Java 如何使用自定义消息记录jpa查询?,java,hibernate,spring-data-jpa,log4j2,Java,Hibernate,Spring Data Jpa,Log4j2,我有一个SpringDataJPA2.0.5.0版本的项目。我需要登录到一个文件中的每个查询执行插入,更新,删除,选择与参数和其他信息。我发现您可以启用Hibernate来记录查询和参数,但它们不是我需要的格式 现在它打印出如下内容: -信息休眠:从表a中选择*其中a.x=? -信息绑定参数[1]为[VARCHAR]-com.mypackage.foo 我想要像这样的东西: -调试用户Mickey Mouse要求从表a中选择*,其中a.x=?[com.mypackage.foo] 有没有类似的方

我有一个SpringDataJPA2.0.5.0版本的项目。我需要登录到一个文件中的每个查询执行插入,更新,删除,选择与参数和其他信息。我发现您可以启用Hibernate来记录查询和参数,但它们不是我需要的格式

现在它打印出如下内容: -信息休眠:从表a中选择*其中a.x=? -信息绑定参数[1]为[VARCHAR]-com.mypackage.foo

我想要像这样的东西: -调试用户Mickey Mouse要求从表a中选择*,其中a.x=?[com.mypackage.foo]

有没有类似的方法? 我尝试使用aop,但我发现切入点有问题,我不确定是否找到了正确的包装方法

这是我的测试。不起作用

@Pointcut("within(org.springframework.data.jpa.repository.query.JpaQueryExecution+)")
    public void jpaQueryMethods() {}

    @Pointcut("execution(* execute(..))")
    public void executionMethods() {}

    @Before("jpaQueryMethods()")
    public void beforeJpaQueryExecution(JoinPoint joinPoint){
        logger.fatal(" signature->", joinPoint.getSignature().toLongString());
        if(joinPoint.getArgs()!=null) {
            for(Object arg: joinPoint.getArgs()) {
                logger.info("----------->"+String.valueOf(arg));
            }
        }

要查看绑定参数,必须设置此属性:

#Spring boot
logging.level.org.hibernate.type.descriptor.sql=trace
您还可以添加自定义消息:

谢谢!该链接帮助我编写自定义消息以供查询!有没有办法用params做同样的事情?同样在这种情况下,我需要在日志中添加更多信息,并对参数进行更紧凑的表示。