[JAVA] Journal système de sortie par la technologie Spring AOP

Qu'est-ce que Spring AOP?

Dans Spring Framework, "AOP" est une technologie de base importante avec DI (Dependency Injection). AOP est l'acronyme de "Aspect Oriented Programming". Les aspects sont ce que l'on appelle communément des «préoccupations transversales».

environnement

Termes d'annotation Spring AOP

1.@Aspect En ajoutant @Aspect à une classe, cette classe sera reconnue comme Aspect. 2.@Pointcut Spécifiez l'emplacement (méthode) pour insérer le processus transversal. 3.@Before Conseil exécuté avant le traitement de la méthode cible. 4.@After Conseil toujours exécuté quel que soit le résultat du traitement de la méthode cible. 5.@AfterReturning Avis qui n'est exécuté que lorsque le traitement de la méthode cible est terminé avec succès. 6.@AfterThrowing Avis qui n'est exécuté que lorsqu'une exception se produit lors du traitement de la méthode cible.

Démo d'implémentation

LoggingAspect.java


package aspect.log;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**Classe d'aspect de sortie de journal. */
@Aspect
@Component
public class LoggingAspect {

  private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);

  /**Coupure de point de méthode publique.Sortie du journal des erreurs système*/
  @Pointcut("execution(public * *(..))")
  private void publicLog() {}

  /**Coupure de point de paquet Dao.sortie du journal des opérations de base de données*/
  @Pointcut("within(app.dao..*)")
  private void dbLog() {}

  /**Coupure du point du package Web.Enregistrer la sortie des demandes, des réponses, etc.*/
  @Pointcut("within(app.web..*)")
  private void webLog() {}

  /**
   *Enregistrer la sortie avant d'exécuter la méthode.
   *
   * @point de jointure param jp
   */
  @Before("publicLog() && (dbLog() || webLog())")
  public void dobefore(JoinPoint jp) {

    Signature sig = jp.getSignature();
    String args = "Aucun";
    if(jp.getArgs() != null && jp.getArgs().length > 0 ) {
    	args = Arrays.toString(jp.getArgs());
    }
    logger.info("[Démarrer l'opération]" +"Méthode:"+sig.getDeclaringTypeName() + "."+sig.getName()+"#Paramètres d'entrée:"+ args);
  }

  /**
   *Sortie du journal après l'exécution de la méthode.
   *
   * @point de jointure param jp
   */
  @AfterReturning(pointcut="publicLog() && (dbLog() || webLog())",returning="returnValue")
  public void doAfterReturning(JoinPoint jp,Object returnValue) {
    Signature sig = jp.getSignature();
    logger.info("[Fin de l'opération]"+"Méthode:"+sig.getDeclaringTypeName() + "."+sig.getName()+"#Valeur de retour:" + returnValue);
  }

  /**
   *Si une erreur se produit, la sortie du journal.
   *
   * @point de jointure param jp
   */
  @AfterThrowing (pointcut="publicLog() && (dbLog() || webLog())",throwing="ex")
  public void doAfterThrowing(JoinPoint jp,Exception ex) {
	  Signature sig = jp.getSignature();
	  StringWriter erMessage=new StringWriter();
	  ex.printStackTrace(new PrintWriter(erMessage));
	  logger.info("【Erreur】" + "Méthode:"+sig.getDeclaringTypeName() + "."+sig.getName()+"#Message d'erreur:" + erMessage.toString());

  }
}

finalement

Merci d'avoir lu jusqu'au bout.

référence: https://docs.spring.io/spring/docs/5.0.5.RELEASE/spring-framework-reference/core.html#aop https://iikanji.hatenablog.jp/entry/2018/04/26/204324

Recommended Posts

Journal système de sortie par la technologie Spring AOP
Sortie du journal Spring Data JPA SQL
Sortie du journal Spring Boot au format json
Sortie des journaux de demande et de réponse avec Spring Boot
À propos de Spring AOP
À propos de Spring AOP
Demander un exemple de sortie du journal des paramètres Java et Spring MVC
Exemple de code pour la sortie du journal par Java + SLF4J + Logback
À propos de la sortie du journal Java
A propos de Spring AOP Pointcut
Présentation de Spring AOP
Sortez le journal d'accès Tomcat intégré à la sortie standard avec Spring Boot