12 Stimmen

Log4j Zeigen Sie den Paketnamen an

Im Moment habe ich für mein ConversionPattern:

log4j.appender.A1.layout.ConversionPattern=%d{yyyy MMM dd HH:mm:ss,SSS} %5p [%t] (%F:%L) - %m%n

Was ich gerne tun würde, ist auch den vollständigen Paketnamen mit der Klasse (%F:%L) einzuschließen, aber ich kann keine Konfiguration in der Dokumentation finden, um das zu tun. Mir ist klar, dass dies langsamer sein wird, aber es ist nur für Debugging und nicht wenn das System in Produktion sein wird.

28voto

Michael Konietzka Punkte 5333

Vielleicht habe ich dich einfach missverstanden, aber %C wird deine Klasse mit Paket ausgeben.

Aus deinen referenzierten Dokumenten:

%C

Wird verwendet, um den vollständig qualifizierten Klassennamen des Aufrufers auszugeben, der die Protokollanforderung stellt. Dieser Konvertierungsspezifizierer kann optional von einem Genauigkeitsspezifizierer gefolgt werden, das ist eine Dezimalkonstante in Klammern.

Wenn ein Genauigkeitsspezifizierer angegeben wird, dann werden nur die entsprechende Anzahl der rechtesten Komponenten des Klassennamens gedruckt. Standardmäßig wird der Klassenname vollständig qualifiziert ausgegeben.

Zum Beispiel wird für den Klassennamen "org.apache.xyz.SomeClass" das Muster %C{1} "SomeClass" ausgeben.

WARNUNG Die Erzeugung von Klasseninformationen ist langsam. Daher sollte der Einsatz vermieden werden, es sei denn, die Ausführungsgeschwindigkeit ist kein Problem.

Aktualisierung: In vielen Fällen kannst du auch %c verwenden, das auch die vollständige Klasse mit Paket ausgeben wird, wenn deine Kategorie dein Klassenname ist. Zum Beispiel, wenn du so etwas machst bei der Initialisierung deines Logs:

private static final Log LOG = LogFactory.getLog(MyClazz.class);

Die Verwendung von %c ist nicht langsam.

0 Stimmen

Das wäre es!! Ich habe es völlig verpasst. Doh.

2voto

Die Verwendung von C{1} ist langsam. Bitte beachten Sie die Details unten:

Laut dem folgenden Link:

Wird verwendet, um den vollständigen Klassennamen des absendenden Aufrufers des Protokollanforderungs zu ermitteln. Dieser Konvertierungsspezifikator kann optional von einem Präzisionsspezifikator gefolgt werden, der eine Dezimalkonstante in Klammern ist. Wenn ein Präzisionsspezifikator angegeben ist, werden nur die entsprechende Anzahl der rechtesten Komponenten des Klassennamens ausgegeben. Standardmäßig wird der Klassenname in vollständig qualifizierter Form ausgegeben.

Zum Beispiel wird für den Klassennamen org.apache.xyz.SomeClass das Muster %C{1} SomeClass ausgeben.

WARNUNG Die Generierung von Informationen zur Aufruferklasse ist langsam. Daher sollte sie vermieden werden, es sei denn, die Ausführungsgeschwindigkeit ist kein Problem.

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