[JAVA] Ausgabesystemprotokoll mit Spring AOP-Technologie

Was ist Spring AOP?

Im Spring Framework ist "AOP" neben DI (Dependency Injection) eine wichtige Kerntechnologie. AOP steht für "Aspect Oriented Programming". Aspekte werden allgemein als "Querschnittsthemen" bezeichnet.

Umgebung

Annotationsbedingungen für Spring AOP

1.@Aspect Durch Hinzufügen von @Aspect zu einer Klasse wird diese Klasse als Aspekt erkannt. 2.@Pointcut Geben Sie den Ort (die Methode) an, an dem der Querschnittprozess eingefügt werden soll. 3.@Before Hinweis, der vor der Verarbeitung der Zielmethode ausgeführt wird. 4.@After Hinweis, der unabhängig vom Verarbeitungsergebnis der Zielmethode immer ausgeführt wird. 5.@AfterReturning Hinweis, der nur ausgeführt wird, wenn die Verarbeitung der Zielmethode erfolgreich abgeschlossen wurde. 6.@AfterThrowing Hinweis, der nur ausgeführt wird, wenn während der Verarbeitung der Zielmethode eine Ausnahme auftritt.

Implementierungsdemo

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;

/**Protokollausgabeaspektklasse. */
@Aspect
@Component
public class LoggingAspect {

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

  /**Öffentlicher Methodenpunktschnitt.Ausgabe des Systemfehlerprotokolls*/
  @Pointcut("execution(public * *(..))")
  private void publicLog() {}

  /**Dao Package Point Cut.Ausgabe des DB-Betriebsprotokolls*/
  @Pointcut("within(app.dao..*)")
  private void dbLog() {}

  /**Webpaket Punkt schneiden.Protokollausgabe von Anfragen, Antworten usw.*/
  @Pointcut("within(app.web..*)")
  private void webLog() {}

  /**
   *Protokollieren Sie die Ausgabe, bevor Sie die Methode ausführen.
   *
   * @param jp join point
   */
  @Before("publicLog() && (dbLog() || webLog())")
  public void dobefore(JoinPoint jp) {

    Signature sig = jp.getSignature();
    String args = "Keiner";
    if(jp.getArgs() != null && jp.getArgs().length > 0 ) {
    	args = Arrays.toString(jp.getArgs());
    }
    logger.info("[Betrieb starten]" +"Methode:"+sig.getDeclaringTypeName() + "."+sig.getName()+"#Eingabeparameter:"+ args);
  }

  /**
   *Protokollausgabe nach Ausführung der Methode.
   *
   * @param jp join point
   */
  @AfterReturning(pointcut="publicLog() && (dbLog() || webLog())",returning="returnValue")
  public void doAfterReturning(JoinPoint jp,Object returnValue) {
    Signature sig = jp.getSignature();
    logger.info("[Betriebsende]"+"Methode:"+sig.getDeclaringTypeName() + "."+sig.getName()+"#Rückgabewert:" + returnValue);
  }

  /**
   *Wenn ein Fehler auftritt, protokollieren Sie die Ausgabe.
   *
   * @param jp join point
   */
  @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("【Error】" + "Methode:"+sig.getDeclaringTypeName() + "."+sig.getName()+"#Fehlermeldung:" + erMessage.toString());

  }
}

Schließlich

Vielen Dank für das Lesen bis zum Ende.

Referenz: 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

Ausgabesystemprotokoll mit Spring AOP-Technologie
Spring Data JPA SQL-Protokollausgabe
Spring Boot-Protokoll im JSON-Format ausgeben
Anforderungs- und Antwortprotokolle mit Spring Boot ausgeben
Über Spring AOP
Über den Frühling AOP
Beispiel für die Ausgabe eines Parameterprotokollprotokolls Java & Spring MVC
Beispielcode für die Protokollausgabe von Java + SLF4J + Logback
Informationen zur Java-Protokollausgabe
Über Spring AOP Pointcut
Übersicht über Spring AOP
Geben Sie das integrierte Tomcat-Zugriffsprotokoll mit Spring Boot an die Standardausgabe aus