2017-05-27 2 views
-1

Ich habe eine Federstütze Anwendung, wo ich Federhalteregler in der Front, Frühjahr Dienstleistungen in Mitte und Frühjahr jpa Repositories hinter den Diensten haben. Die übrigen Controller delegieren die Anfrage einfach an die Service-Schicht. Nun, die Frage ist, ich kann alle Probleme oder Informationsnachrichten in Service-Layer oder Controller-Ebene protokollieren, oder ich kann beide sauber halten und verwenden Sie einen AOP-Ansatz zum Erfassen und Protokollieren von Daten in einer Protokolldatei. Ich bin nicht in der Lage zu entscheiden, was der beste Ansatz ist, und warum. Bitte geben Sie mir einige Vorschläge, wenn Sie welche haben. Vielen Dank.Logging und Spring Rest MVC App

Antwort

2

Der übliche Weg, damit umzugehen, ist eine Instanz der Logger Klasse in jeder einzelnen Schicht zu haben.

für exemple:

public class EmployeeService { 
    private Logger logger = LoggerFactory.getLogger(EmployeeService.class); 
} 

public class EmployeeController { 
    private Logger logger = LoggerFactory.getLogger(EmployeeController.class); 
} 
  • Der Code ist viel sauberer
  • Sie haben die Möglichkeit, Protokolle innerhalb Klassenmethoden zu tun, wohl wissend, dass AOP approch es nicht gestattet.
1

Mit AOP-Ansatz müssen Sie wissen, dass neue zusätzliche Klassen mit zusätzlicher Logik erstellt werden, die Protokollierungsfunktionen in Ihre Klassen bietet. Und genau diese neuen Klassen (Proxies) werden anstelle Ihrer verwendet. Dieser Ansatz hat einige Probleme, z. B. wenn eine Methode, die mit Anmerkungen zum Schreiben von Protokollen versehen ist, eine andere aufruft, die ebenfalls auf ähnliche Weise mit Anmerkungen versehen ist. In diesem Fall schreibt die zweite Methode keine Protokolle.

Je nach Leistung sind beide Ansätze ziemlich ähnlich mit Ausnahme von mehr Klassen im Speicher mit AOP.

Auch mit AOP können Sie nur ein Protokoll vor oder nach Methodenaufruf machen, aber was ist, wenn Sie etwas in Methode schreiben müssen?

Ich schlage vor, auf einfache Weise zu verwenden und Logger in Klassen deklarieren. In diesem Fall wird Ihr Code verständlicher und Sie werden flexibler sein.

1

Es ist eine gute Annäherung an Benutzer eigenen Logger-Objekt für jede Klasse, vor allem wissen Sie auf jeden Fall, wo Protokoll wurde initialisiert und zweitens können Sie flexibel konfigurieren Prozess von Protokoll.