5
votes

Spring Log for Rest Controller

J'ai un contrôleur de repos contient de nombreuses méthodes

@RestController
@RequestMapping("v1/test")
public class TestRestController {

   ...... 100 methods (GET, POST, PATCH, etc)
}

Comment puis-je savoir à quelle méthode accède sans utiliser print dans chaque méthode?
Y a-t-il des moyens de le faire?


5 commentaires

Essayez-vous spécifiquement de le limiter à cette classe uniquement ou la journalisation de tous les appels est-elle correcte? (Notez également que même pour "tester" une classe avec autant de méthodes est folle ; séparez-les.)


J'avais répondu à une question pour obtenir des détails sur la méthode du contrôleur utilisant Spring AOP ici


Cela fonctionnera-t-il sur @Controller?


@BunthaiDeng Oui, vous devez modifier le code en conséquence. Votre question concerne RestController, non?


c'était juste une question supplémentaire. Merci, je comprends.


3 Réponses :


2
votes

Vous pouvez utiliser Spring AOP:

package com.example;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

@Aspect
public class ExampleAspect {

    @Before("execution(* com.example.TestRestController(..)")
    public void log(JoinPoint joinPoint) {
        System.out.println("Executing :" + joinPoint.toString());
    }
}


0 commentaires

1
votes

Utilisation de la programmation orientée aspect avec Spring:

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;    

@Aspect
public class SpringAspect {

    private static final Logger LOG = LoggerFactory.getLogger(SpringAspect.class);

    @Before("execution(* sample.package.path.TestRestController.*(..))")
    public void executedMethodsLogger(JoinPoint joinPoint) {
        LOG.info("[ Executed method {} ]", joinPoint.toString());
    }

}


0 commentaires

1
votes

Bien que vous puissiez utiliser les tactiques AOP indiquées dans les autres réponses pour consigner les méthodes, il existe de meilleures approches si tout ce que vous voulez faire est de consigner toutes les demandes et réponses pour les points de terminaison que ces méthodes implémentent. Cela peut être fait de plusieurs manières: Utilisez CommonRequestLoggingFilter de Spring ou écrivez votre propre HandlerInterceptor. Voici un bel article sur les deux premières options.


0 commentaires