2009-11-04 15 views
41

Podczas próby wykonania następujących linii wyświetlane są tylko dwie ostatnie instrukcje ("Tutaj jest jakaś ERROR" i "Tutaj jest trochę FATAL"), a pierwsze trzy instrukcje nie są wyświetlane . Właśnie zacząłem uczyć się tego tematu, czy ktoś może powiedzieć, dlaczego tak się dzieje?Jak włączyć Logger.debug() w Log4j

logger.debug("Here is some DEBUG"); 
    logger.info("Here is some INFO"); 
    logger.warn("Here is some WARN"); 
    logger.error("Here is some ERROR"); 
    logger.fatal("Here is some FATAL"); 

log4j.property ma

log4j.rootLogger=debug,stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=[%5p] %d{mm:ss}(%F:%M:%L)%n%m%n%n 
+0

Ale mam log4j.properties, czy to nie wystarczy? – Hariharbalaji

+0

Czy możesz opublikować plik log4j.properties? –

+2

nie powinieneś nazywać go 'log4j.property', powinno być' log4j.properties' –

Odpowiedz

54

Prawdopodobnie masz plik log4j.properties gdzieś w projekcie. W tym pliku możesz skonfigurować poziom żądanego poziomu debugowania. Zobacz poniższy przykład:

log4j.rootLogger=info, console 

log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout 
log4j.appender.console.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n 

log4j.logger.com.example=debug 

Pierwsza linia ustawia poziom dziennika do rejestratora głównego do „informacji”, czyli tylko info, warn, error i fatal zostanie wydrukowany do konsoli (co jest appender zdefiniowane trochę poniżej).

Ostatnia linia ustawia rejestrator dla com.example. * (Jeśli otrzymasz rejestratory przez LogFactory.getLogger(getClass())) będzie na poziomie debugowania, tzn. Zostanie również wydrukowane debugowanie.

+3

Może to być również plik log4j.xml, który jest plikiem XML, który jest używany zamiast pliku właściwości Java. –

+0

Witam, log.isDebugEnabled() wyświetla true w jednej z moich klas, ale log.debug() nie drukuje niczego na konsoli. Jak debugować to ...? help .. – pavan

8

umieścić plik o nazwie log4j.xml w ścieżce klas. Treści to np.

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <appender name="stdout" class="org.apache.log4j.ConsoleAppender"> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %t %c{1}:%L - %m%n"/> 
     </layout> 
    </appender> 

    <root> 
     <level value="debug"/> 
     <appender-ref ref="stdout"/> 
    </root> 

</log4j:configuration> 
+2

Ma już plik właściwości. Wierzę w najnowszą wersję log4j, zaleca się używanie XML zamiast tego, ale nie jest to wymagane - można użyć pliku właściwości. –

+0

Co więc powinienem zrobić, aby rozwiązać problem? – Hariharbalaji

2

Musisz ustawić poziom rejestratora na najniższy poziom, który chcesz wyświetlić. Na przykład, jeśli chcesz wyświetlać komunikaty DEBUG, musisz ustawić poziom rejestratora na DEBUG.

Sekcja konfiguracji zawiera numer Apache log4j manual.

+0

Nie wiedziałem, jaki był problem w ostatnim programie, ale skopiowałem ten sam kod i wykonałem go w innej ścieżce, a teraz działa teraz – Hariharbalaji

2

Dzieje się tak ze względu na fakt, że poziom rejestrowania rejestratora jest ustawiony na "błąd" - w związku z tym komunikaty o błędach będą wyświetlane tylko powyżej tego poziomu, dlatego też można zauważyć "wiadomość.

Jeśli ustawisz poziom rejestrowania na "debugowanie" na swoim loggerze w pliku log4j.xml, powinieneś zobaczyć wszystkie wiadomości.

Zapoznaj się z wprowadzeniem na temat wprowadzania wyjaśnień w dokumencie log4j.

6

To się prawdopodobnie dzieje, ponieważ konfiguracja log4j jest ustawiona na ERROR. Poszukaj pliku log4j.properties z treści jak następuje:

log4j.rootLogger=ERROR, CONSOLE 

# console logging 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
log4j.appender.CONSOLE.Threshold=DEBUG 
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
log4j.appender.CONSOLE.layout.ConversionPattern=%d %-5p %-20.20t %-24c{1}: %m%n 

rootLogger jest ustawiony na poziomie ERROR tutaj używając CONSOLE appender.

Należy zauważyć, że niektóre dodatki, takie jak append konsoli, mają również właściwość Threshold, której można użyć do nadpisania poziomu rootLoggers. Musisz sprawdzić oba w tym przypadku.

3

Chciałbym użyć toczącego się aplikacji do zapisywania danych do pliku. Mój plik właściwości log4j zazwyczaj wygląda mniej więcej tak. Wolę ten sposób, ponieważ lubię tworzyć logi specyficzne dla pakietu, w przypadku gdy potrzebuję różnych stopni logowania dla różnych pakietów. Tylko jeden pakiet jest wymieniony w tym przykładzie.

log4j.appender.RCS=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.RCS.File.DateFormat='.'yyyy-ww 
#define output location 
log4j.appender.RCS.File=C:temp/logs/MyService.log 
#define the file layout 
log4j.appender.RCS.layout=org.apache.log4j.PatternLayout 
log4j.appender.RCS.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm a} %5 %c{1}: Line#%L - %m%n 
log4j.rootLogger=warn 
#Define package specific logging 
log4j.logger.MyService=debug, RCS 
46

Oto krótki jedna linia siekać, że od czasu do czasu użyć, aby tymczasowo włączyć rejestrowanie debugowania w teście JUnit:

Logger.getRootLogger().setLevel(Level.DEBUG); 
+6

Szybkie upuszczenie bez potrzeby importowania: 'org.apache.log4j.Logger. getRootLogger(). setLevel (org.apache.log4j.Level.DEBUG); ' –

+1

Tak ... ale jest bardzo prawdopodobne, że robisz już rzeczy z' Loggerem' w klasie, w której włączasz rejestrowanie. Import prawdopodobnie już istnieje. –

+0

Oczywiście, z 'Logger'; ale nie zwykle "Poziom". –

3

Jeżeli przyjeżdżasz tutaj, ponieważ używasz commons Apache logowaniem z log4j i log4j nie działa tak, jak się spodziewasz, sprawdź, czy rzeczywiście masz log4j.jar w swojej klasie run-time. Ten przez chwilę mnie zaintrygował. Skonfigurowałem już runnera w moim środowisku programistycznym tak, aby zawierał -Dlog4j.debug w linii poleceń Java, więc zawsze widzę, że Log4j jest poprawnie inicjowany

+0

lub upewnij się, że nie używasz slf4j-simple jar i zamień na slf4j-log4j12 – Jason