2012-06-20 24 views
9

Per registrare gli errori per una determinata classe, sto accedendo al nome della classe in questo modo: È un modo 'buono' per restituire il nome della classe come una stringa, in modo che possa essere utilizzato per la registrazione ?Ottenere il nome della classe per la registrazione

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

risposta

4

È possibile impostare i parametri di registrazione in log4j.xml stesso.

Per 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> 

Sarebbe il login eccezioni come questo in SWCD-web.log di file -

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

La questione non è di circa log4j. –

1

lo farò in questo modo:

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

È più facile mantenere se qualcosa cambia, ma ci sono altri modi per farlo.

+1

this.getClass(). GetName() fornirebbe il nome completo della classe (compresi i pacchetti). Vorrei troncare e utilizzare solo il nome della classe. – 18bytes

+1

È possibile utilizzare this.getClass(). GetSimpleName() se si preferisce – raven1981

4

Se si inizializza il registratore in questo modo:

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

poi il nome della classe sarà presente in ogni registrazione degli eventi, non c'è bisogno di mettere esplicitamente in ogni registro chiamate:

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

l'è possibile configurare il servizio di registrazione (in logging.properties in caso di java.util.logging o log4j.properties se si utilizza Apache log4j) per includere il nome della classe in ogni messaggio di registro.

1

Poiché non è stato indicato quale libreria di registrazione si sta utilizzando, suggerisco di utilizzare slf4j. Penso che sia il più facile da ottenere. È sufficiente chiedere un oggetto Logger dal di slf4j LoggerFactory come questo:

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

ora è possibile utilizzare l'oggetto LOGGER per la registrazione.

registrazione di un errore, per esempio si presenta così:

LOGGER.error(yourMessage, throwable); 

è possibile inviare un messaggio semplice stringa o l'intera eccezione.

7

Java 8 Soluzione

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

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

Ricevo errore: il metodo getLogger (Classe ) Non è definito per il tipo LoggerFactory –

+0

molto strano, si sta utilizzando Java 8 e logback? – MariuszS

+0

non utilizzando il logback, grazie –

Problemi correlati