Hallo zusammen,
ich habe eine Anwendung, die slf4j und Logaback zum Loggen nutzt. In
der sl4j-FAQ gibt es folgenden Eintrag zur empfohlenen Anwendung:
package some.package;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
final (static) Logger logger =
LoggerFactory.getLogger(MyClass.class);
... etc
}
http://www.slf4j.org/faq.html#declaration_pattern
Ich möchte hier nicht darüber diskutieren, ob der Logger static sein
soll oder nicht, meiner Meinung nach nicht, soll jeder slebst
entscheiden, mir egal. :-)
Was mich interessiert ist, warum die slf4j-Jungs in ihrer FAQ die
Nutzung eines static loggers offen lassen, aber beim Bezug des
Loggers immer von einem statischen Kontext ausgehen? Konkret könnte
man anstelle MyClass.class doch auch this.getClass() schreiben, wenn
man keinen static logger verwenden möchte. Derzeit habe ich es
beispielsweise so und ich habe zumindest einen Artikel gefunden, der
this.getClass aus den selben Gründen diskutiert, weil man so leichter
kopieren kann und solche Dinge.
Gibt es zwischen this.getClass() und MyClass.class in dem Fall, dass
man keinen static logger nimmt, irgendeinen Unterschied? Beides wird
doch erst zur Laufzeit ausgewertet, oder? Wie oft ausgewertet wird,
gehört für mich zur static vs. nicht static-Diskussion, um die es mir
hier nicht geht.
Ich kan nur den Nachteil erkennen, dass MyClass.class auch in
vollständig statischen Kontexten funktioniert, wohingegen
this.getClass dann angepasst werden müsste. Solche Fälle sind meiner
Meinung nach aber weniger wahrscheinlich, als das man obige Zeile in
eine andere Klasse kopiert und dann vergisst, den Namen zu ändern.