Derzeit eine Feder Boot-Anwendung und für jede Klasse wie SampleClass
, dass ich habe würde ich ein Protokoll ich den Logger wie diese, müssen sie gerne initialisieren:Dynamisch im Frühjahr Rahmen Anmeldung
private static Logger log = LoggerFactory.getLogger(SampleClass.class);
was bedeutet, dass Wir müssen den Klassennamen statisch an die Methode getLogger
senden. Ich dachte daran, eine loggable Schnittstelle zu erstellen und jedes Mal, wenn eine Klasse diese Schnittstelle implementiert, findet sie dynamisch den Klassennamen und schreibt das Protokoll korrekt in den Ausgabestrom mit dem korrekten Klassennamen. Ich googelte, um eine richtige Lösung zu finden, aber jedes Beispiel sendet speziell den Klassennamen in der Kompilierzeit. Hat der Frühling diese Fähigkeit?
Werfen Sie einen Blick auf https://stackoverflow.com/questions/3923971/why-calling-loggerfactory-getlogger-every-time-is-not-recommended! –
Nein, aber ich habe eine Schnittstelle ILOgable erstellt und ich habe ein Protokoll-Objekt auf die gleiche Weise wie in der Verknüpfung erwähnt erstellt. Erstellt eine Protokollklasse und implementiert ILoggable. Wenn ich das Log-Objekt innerhalb der Log-Klasse verwende, sage ich, dass das Log zu ILoggable anstatt zur Log-Klasse gehört. die Ausgabe ist etwas wie diese "cccservice.ILogable: test" statt "cccservice.Log: test" – Reza
Sie haben 2 Optionen: entweder verwenden private statische endgültige Logger LOG = LoggerFactory.getLogger (MethodHandles.lookup(). LookupClass()) 'als Ihre Protokolldefinition, die Sie als Live-Vorlage in IntelliJ Idea deklarieren können (Eclipse hat etwas Ähnliches) und beim Eingeben Ihres Vorlagenworts ersetzt die IDE dieses Wort durch den passenden Code oder verwendet Projekt Lombok und definiert a einfache ['@ Log',' @ Slf4j', ...] (https://projectlombok.org/features/Log.html) Annotation auf Klassenebene –