Wenn ein Logger unter Java erstellt wird, so wird diesem in den meisten Fällen ein Name übergeben, über den er später identifiziert und konfiguriert werden kann. Mit der Simple Logging Facade for Java kurz SLF4J würde das Ganze so aussehen:
Logger logger = LoggerFactory.getLogger("Testclass");
Die erste Möglichkeit wäre es nun den Namen der Klasse, über die Klasseninformationen mittels:
Logger logger = LoggerFactory.getLogger(Testclass.class.getName());
zu ermitteln. Alternativ kann diese Klasseninformation direkt in die Methode gegeben werden:
Logger logger = LoggerFactory.getLogger(Testclass.class);
Alle diese Methoden haben den Nachteil das die jeweilige Klasse in irgendeiner Form übergeben werden muss. Wenn nun dieser Logger in eine andere Klasse kopiert wird, um ihn dort ebenfalls zu nutzen, muss der Name der Klasse angepasst werden. Anders funktioniert das Ganze mit der folgenden Methode:
Logger logger = LoggerFactory.getLogger(new Exception().fillInStackTrace().getStackTrace()[0].getClassName());
Bei diesem Beispiel wird eine neue Exception instanziiert und aus dem Stacktrace dieser Exception der Name der Klasse ermittelt. Somit kann diese Zeile von Klasse zu Klasse kopiert werden, ohne das eine Anpassung notwendig wird.
Pingback: Klassenname für Logger unter Java automatisch ermitteln › seeseekey.net