2010-04-07 10 views
10

Gerade jetzt für meine ConversionPattern ich habe:Log4j zeigen Paketnamen

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

Was ich auch tun würde, ist enthalten den vollständigen Paketnamen mit der Klasse (% F:% L), aber ich kann‘ t finden Sie any config to do so in the docs. Ich verstehe, dass dies langsamer sein wird, aber es ist nur für das Debuggen und nicht, wenn das System in Produktion ist.

Antwort

21

Vielleicht missverstehe ich Sie einfach, aber% C wird Ihre Klasse mit Paket ausgeben.

Von Ihrem referenzierte Dokument:

% C

den vollständig qualifizierten Klasse Namen des Anrufers zur Ausgabe Ausgabe der Logging-Anforderung verwendet. Diese Umwandlung Spezifizierer kann optional von Präzisionsspezifizierer gefolgt werden, das ist eine Dezimalkonstante in Klammern.

Wenn ein Genauigkeitsbezeichner gegeben wird, dann nur die entsprechende Anzahl von am weitesten rechts stehenden Komponenten des Klasse Namen gedruckt. Standardmäßig wird der Klassenname vollständig in qualifizierte Form ausgegeben.

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

WARNUNG Generieren der Anrufer-Klasse Informationen sind langsam. Daher sollte die Verwendung vermieden werden, es sei denn, die Ausführungsgeschwindigkeit ist kein Problem.

Update: In vielen Fällen Sie% c auch verwenden können, die mit dem Paket heraus die volle Klasse druckt auch, wenn Sie Ihre Kategorie Klasse-Name ist. Zum Beispiel, wenn Sie bei der Initialisierung Ihres Logs so etwas tun:

Die Verwendung von% c ist nicht langsam.

+0

Das wäre es !! Ich habe es komplett vermisst. Do. –

+0

können Sie Ihr Muster online auf dieser Website testen: http://log4jtester.com/ –

1

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

Gemäß den folgenden link:

zur Ausgabe verwendet, um die vollständig qualifizierten Klassennamen des Anrufers Ausgabe die Protokollierung Anfrage. Dieser Konvertierungsspezifizierer kann optional gefolgt von einem Präzisionsspezifizierer sein, dh eine Dezimalkonstante in Klammern. Wenn ein Präzisionsspezifizierer angegeben wird, wird nur die entsprechende Anzahl der am weitesten rechts stehenden Komponenten des Klassennamens gedruckt. Standardmäßig wird der Klassenname im vollständig qualifizierten Format ausgegeben.

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

WARNUNG Die Informationen zur Anruferklasse werden langsam generiert. Daher sollte die Verwendung vermieden werden, es sei denn, die Ausführungsgeschwindigkeit ist kein Problem.