2012-06-20 8 views
9

Um Fehler für eine bestimmte Klasse zu protokollieren, greife ich folgendermaßen auf den Klassennamen zu: Ist dies eine 'gute' Methode, den Klassennamen als String zurückzugeben, damit er für die Protokollierung verwendet werden kann ?Abrufen des Klassennamens für die Protokollierung

private static final String CLASS_NAME = MyClass.class.getName(); 
logger.error("Error occurred in "+CLASS_NAME); 

Antwort

4

Sie können Ihre Protokollierungsparameter in log4j.xml selbst einrichten.

Für exp -

<appender name="swcd-web" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="Threshold" value="DEBUG"/> 
    <param name="Append" value="true"/> 
    <param name="File" value="${catalina.home}/logs/swcd-web.log"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/> 
    </layout> 
</appender> 

Es Ausnahmen wie dies in SWCD-web.log Log-Datei würde -

2012-05-23 16:34:51,632 [main] ERROR com.idc.sage.sso.dynamo.SsoDbStorage - cannot get configuration for max SSO age 
+0

Die Frage ist nicht über log4j. –

1

Ich werde es auf diese Weise tun:

logger.error("Error occured in " + this.getClass().getName()); 

Es ist einfacher zu behalten, wenn sich etwas ändert, aber es gibt noch andere Möglichkeiten, dies zu tun.

+1

this.getClass(). GetName() würde den vollständigen Klassennamen (einschließlich der Pakete) angeben. Ich würde nur den Klassennamen abschneiden und verwenden. – 18bytes

+1

Sie können this.getClass(). GetSimpleName() verwenden, wenn Sie bevorzugen – raven1981

4

Wenn Sie den Logger auf diese Weise initialisieren:

private static Logger logger = Logger.getLogger(MyClass.class.getName())> 

dann der Name der Klasse wird in jeder Anmeldung anwesend sein, brauchen Sie nicht explizit Anruf in jedem Protokoll setzen:

logger.error("Error occured while doing this and that"); 

Das können Sie den Protokollierungsdienst (in logging.properties bei java.util.logging oder log4j.properties, wenn Sie Apache log4j verwenden) konfigurieren schließen der Klassenname in jeder Protokollnachricht.

1

Da Sie nicht angeben, welche Protokollierungsbibliothek Sie verwenden, empfehle ich, slf4j zu verwenden. Ich denke, es ist das Einfachste, was man bekommen kann. Sie fragen einfach für einen Logger-Objekt aus slf4j des LoggerFactory wie folgt aus:

private static final Logger LOGGER = LoggerFactory.getLogger(YouerClass.class); 

jetzt können Sie die LOGGER Objekt für die Protokollierung verwenden.

einen Fehler beispielsweise Logging sieht wie folgt aus:

LOGGER.error(yourMessage, throwable); 

Sie können einen einfachen String-Nachricht oder die ganze Ausnahme senden.

7

Java 8 Lösung

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import java.lang.invoke.MethodHandles; 
... 

private final static Logger LOG = 
        LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); 
+0

Ich erhalte Fehler: Die Methode getLogger (Klasse ) Ist für den Typ LoggerFactory –

+0

sehr seltsam, verwenden Sie Java 8 und Logbuch? – MariuszS

+0

logback nicht verwenden, danke –

Verwandte Themen