48 Stimmen

Warum ist es nicht empfehlenswert, LoggerFactory.getLogger(...) jedes Mal aufzurufen?

Ich habe tonnenweise Beiträge und Dokumente (auf dieser Website und anderswo) gelesen, die darauf hinweisen, dass das empfohlene Muster für die SFL4J-Protokollierung lautet:

public class MyClass {
    final static Logger logger = LoggerFactory.getLogger(MyClass.class);

    public void myMethod() {
        //do some stuff
        logger.debug("blah blah blah");
    }
}

Mein Chef zieht es vor, dass wir nur einen Wrapper verwenden, um Log-Aufrufe abzufangen und Boiler-Plate-Code zur Deklaration des Loggers in jeder Klasse zu vermeiden:

public class MyLoggerWrapper {
    public static void debug(Class clazz, String msg){
        LoggerFactory.getLogger(clazz).debug(msg));
    }
}

und sie einfach so zu verwenden:

public class MyClass {

    public void myMethod() {
        //do some stuff
        MyLoggerWrapper.debug(this.getClass(), "blah blah blah");
    }
}

Ich vermute, dass die Instanziierung eines Loggers jedes Mal, wenn wir protokollieren, etwas teuer ist, aber ich konnte kein Dokument finden, das diese Annahme unterstützt. Außerdem sagt er, dass das Framework (LogBack oder Log4J, wir entscheiden noch) die Logger "zwischenspeichern" wird und dass die Server auf jeden Fall weit unter ihrer Kapazität laufen, so dass dies kein Problem darstellt.

Kann mir jemand helfen, mögliche Probleme bei diesem Ansatz aufzuzeigen?

0voto

Jay Punkte 435

Vielleicht habe ich es in einem der früheren Kommentare übersehen, aber ich habe keinen Hinweis darauf gesehen, dass der Logger statisch Der Aufruf von LoggerFactory erfolgt EINMAL (pro Instanziierung der Klasse) - die anfängliche Besorgnis über mehrere Aufrufe zur Erstellung des Loggers ist also einfach falsch.

Die anderen Kommentare zu den Problemen mit dem Hinzufügen von Wrapping-Klassen sind ebenfalls sehr wichtig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X