[JAVA] Injizieren Sie den Logger im Frühjahr

Einführung

Verwenden Sie bei der Ausgabe von Log in Java Bibliotheken wie Log4j und Logback oder java.util.logging. Die meisten Bibliotheken und APIs erhalten und generieren Logger-Instanzen wie folgt.

Logger logger = Logger.getLogger(Hoge.class);

Das Schreiben in jeder Klasse ist mühsam. Lassen Sie uns einen einfacheren Weg finden, mit Spring zu schreiben.

Frühere Geschichte

Es ist fast eine Einführung in die Implementierung dieser Site. http://memorynotfound.com/spring-inject-logger-annotation-example/

Vielen Dank.

Logger-Injektion bis zum Frühjahr

Wenn Sie Spring verwenden, können Sie Logger wie folgt in das mit Anmerkungen versehene Feld einfügen:

    @Log
    private static Logger logger;

Der Umfang der Beschreibung ist gering, es ist jedoch nicht erforderlich, die Klasse des Arguments anzugeben, damit Sie den Fehler von Logger beseitigen können (was manchmal durch Kopieren erfolgen sollte).

Ich werde erklären, wie es implementiert wird.

Protokollanmerkung

Erstellen Sie eine Protokollanmerkung wie unten gezeigt.

Log.java


@Retention(RUNTIME)
@Target(FIELD)
@Documented
public @interface Log {
}

Da es zur Laufzeit referenziert wird, ist es "@Retention (RUNTIME)", und da das Ziel ein Feld ist, ist es "@Target (FIELD)".

LogInjector

Schreiben Sie mit Spring den Code, um den Logger mit der zuvor erstellten Annotation "@ Log" in das Feld einzufügen.

Erstellen Sie eine BeanPostProcessor-Implementierung für Spring wie unten gezeigt und erstellen Sie einen Logger darin.

@Component
public class LogInjector implements BeanPostProcessor {

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }

    @Override
    public Object postProcessBeforeInitialization(final Object bean, String name) throws BeansException {
        ReflectionUtils.doWithFields(bean.getClass(), new ReflectionUtils.FieldCallback() {
            public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException {
                // make the field accessible if defined private
                ReflectionUtils.makeAccessible(field);
                if (field.getAnnotation(Log.class) != null) {
                    Logger log = Logger.getLogger(bean.getClass());
                    field.set(bean, log);
                }
            }
        });
        return bean;
    }

}

wie benutzt man

Jetzt bist du bereit. Danach können Sie es verwenden, indem Sie die folgenden Schritte ausführen.

Jetzt müssen Sie nicht jedes Mal "getLogger" ausführen.

Recommended Posts

Injizieren Sie den Logger im Frühjahr
Verwenden Sie Interceptor im Frühjahr
Microservices in Spring Cloud
Holen Sie sich Cookies im Frühling
Legen Sie den Kontextparameter in Spring Boot fest
Spring Boot 2 Multiprojekt mit Gradle
Fehler in der Spring-Datenbankverbindung
Wichtige Änderungen in Spring Boot 1.5
NoHttpResponseException in Spring Boot + WireMock
Schleifenschritt mit Spring Batch
Wie man Lombok im Frühling benutzt
Rufen Sie Chain from Chain in Spring Integration auf
Frühlingsstiefel Hallo Welt in Eclipse
Spring Boot-Anwendungsentwicklung in Eclipse
Java Spring-Umgebung in vs Code
Schreiben Sie den Testcode mit Spring Boot
Ich habe am JJUG CCC 2019 Spring teilgenommen
Implementieren Sie reCAPTCHA v3 in Java / Spring
Speichern Sie Sitzungsinformationen mit Spring Session in der Datenbank
Implementieren Sie die REST-API mit Spring Boot
Was ist @Autowired im Spring Boot?
Die Ereignisverarbeitung wird im Frühjahr durchgeführt.
Implementieren Sie die Spring Boot-Anwendung in Gradle
Verwendung von Thymeleaf mit Spring Boot
Spring Autowired wird im Konstruktor geschrieben
Starten Sie mit IntelliJ ein (altes) Spring Boot-Projekt
Konvertieren Sie Anforderungsparameter im Frühjahr in Enum
Erstellen Sie mit Gradle ein Spring Boot + Docker-Image
Statische Dateizugriffspriorität beim Spring Boot
Wie kann ich Spring Tool in Eclipse 4.6.3 einbinden?
Existiert mit der Spezifikation in Spring Data JPA
Spring Boot-Protokoll im JSON-Format ausgeben
Memorandum zum Herunterladen lokaler Dateien mit Spring Boot
Behandeln Sie Systemumgebungsvariablen in Spring application.properties
Erstellen Sie mit IntelliJ ein Java Spring Boot-Projekt
Lösen Sie die Thymeleaf-Syntaxprüfung in Spring Boot
Fehler bei der Implementierung bei der Implementierung der Spring-Validierung
Separate Task Executors, die von @Async im Frühjahr verwendet werden
[Trainieren! ] Zeigen Sie Hello World mit Spring Boot an
Funktionsweise des Dispatcher-Servlets in Spring MVC
Verwenden Sie die DynamoDB-Abfragemethode mit Spring Boot
Null-Support-Cache in Spring Data Redis
Antwortdaten direkt im Frühjahr schreiben
Wichtige Änderungen in der Kernfunktionalität von Spring Framework 5.0
Ich war süchtig nach Spring's @Transactional
Wechseln der Beans mit Profilanmerkung im Frühjahr
DI SessionScope Bean im Spring Boot 2-Filter
[Java] [Spring] Testen Sie das Verhalten des Loggers
[* Java *] Ich habe am JJUG CCC 2019 Spring teilgenommen
Maven-Konfigurationsproblem mit Spring pom.xml in Eclipse
Ändern Sie das Sitzungszeitlimit in Spring Boot
Ausgabe Bean als JSON im Frühjahr