2012-06-20 14 views
9

Aby rejestrować błędy dla danej klasy, uzyskuję dostęp do nazwy klasy w następujący sposób: Jest to "dobry" sposób na zwrócenie nazwy klasy jako łańcucha znaków, dzięki czemu można jej użyć do rejestrowania ?Uzyskiwanie nazwy klasy dla rejestrowania

Odpowiedz

4

Możesz ustawić parametry logowania w samym log4j.xml.

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

wyjątki takie jak ten Byłoby zalogować swcd-web.log pliku -

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

Nie chodzi o log4j. –

1

zrobię to w ten sposób:

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

Łatwiej jest zachowywać się, jeśli coś się zmieni, ale są inne sposoby, aby to zrobić.

+1

this.getClass(). Funkcja getName() podałaby pełną nazwę klasy (łącznie z pakietami). Obcinałbym i używam tylko nazwy klasy. – 18bytes

+1

Możesz użyć this.getClass(). GetSimpleName(), jeśli wolisz – raven1981

4

Jeśli zainicjować Rejestrator ten sposób:

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

następnie nazwa klasy będzie obecny w każdym razie Rejestrowanie, nie trzeba jawnie umieścić go w każdej rozmowy dziennika:

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

można skonfigurować usługę rejestrowania (w logging.properties w przypadku java.util.logging lub log4j.properties jeśli używasz Apache log4j) w celu włączenia nazwa klasy w każdym komunikacie dziennika.

1

Ponieważ nie podano, z której biblioteki logowania korzystasz, sugeruję użycie slf4j. Myślę, że jest to najłatwiejsze do zdobycia. Wystarczy poprosić o obiekcie rejestratorze z slf4j na LoggerFactory tak:

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

teraz można korzystać z obiektu LOGGER do logowania.

Logging błąd na przykład wygląda następująco:

LOGGER.error(yourMessage, throwable); 

Można wysłać wiadomość prosty łańcuch lub cały wyjątek.

7

Java 8 Rozwiązanie

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

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

Otrzymuję błąd: Metoda getLogger (klasa ) Jest niezdefiniowana dla typu LoggerFactory –

+0

bardzo dziwna, czy używasz Java 8 i logback? – MariuszS

+0

nie używać logback, dzięki –

Powiązane problemy