2013-07-03 9 views
5

Nie używam plików konfiguracyjnych ani xml do konfiguracji log4j, ponieważ nie ma potrzeby jej głębokiej konfiguracji. Muszę tylko wydrukować wiadomości na konsolę. tak ja to zrobić:Jak skonfigurować log4j do rejestrowania tylko wiadomości informacyjnych i wyższych?

BasicConfigurator.configure(); 

i drukować tylko informacje i wyższe wiadomości to zrobić:

Logger LOG = Logger.getLogger(MyClass.class) 
LOG.setLevel(Level.INFO); 

Niemniej jednak widzę komunikaty debugowania w konsoli zbyt. Ale potrzebuję tylko wydrukować informacje i komunikaty o błędach.

Jak to zrobić?

UPD: stworzyłem plik konfiguracyjny z którym zawiera, jak opisano w poradniku tutaj: manual następujące:

log4j.rootLogger=INFO, stdout 

    # Direct log messages to 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=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L  %m%n 

log4j.logger.com.messagedna.facade=INFO 
log4j.logger.com.messagedna.receiver=INFO 
log4j.logger.com.messagedna.util=INFO 
log4j.logger.com.messagedna.parser=INFO 

I umieścić go na com.messagedna

W każdej klasie Potrzebuję rejestratora, napisałem:

Properties props = new Properties(); 
try { 
    props.load(new FileInputStream("/log4j.properties")); 
    } catch (Exception e){ 
     LOG.error(e); 
     } 
PropertyConfigurator.configure(props); 

, ale w kura uruchomić mój app uzyskać następujące:

log4j:WARN No appenders could be found for logger (com.messagedna.server.util.Config). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
+0

Twój log4j mieszka w katalogu głównym systemu plików ?! –

+1

Nie mogę działać z takimi pojęciami.Czy chodzi ci o to, gdzie znajduje się plik konfiguracyjny, czy co jeszcze? –

Odpowiedz

5

ustawiasz tylko poziom komunikatów rejestrowane przy użyciu rejestratora dla MyClass.class, jednak żadnych wiadomości na poziomie debugowania na innych rejestratorach nadal będzie drukowane.

To, co naprawdę musisz zrobić, to ustawić poziom dziennika na konsoli obsługi dziennika (który jest odpowiedzialny za drukowanie wszystkich komunikatów dziennika na konsoli). Jednak robienie tego podczas korzystania z BasicConfigurator będzie dość trudne, lepiej będzie przejść do konfiguracji logowania określonej w pliku właściwości (która jest znacznie bardziej elastyczna).

Poradziłbym, abyś pracował przez log4j logging configuration tutorial - to pomoże ci skompletować dokładnie taką konfigurację, jaką chcesz, i powinna okazać się wartościową inwestycją twojego czasu. Jednakże, jeśli chcesz, aby to zrobić szybko, spróbuj dodać poniżej treść do pliku log4j.properties (example taken from here):

# Root logger option 
log4j.rootLogger=INFO, stdout 

# Direct log messages to 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=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

A potem zmienia swój kod, aby wykonać następujące czynności:

Properties props = new Properties(); 
props.load(new FileInputStream("/my/path/to/log4j.properties")); 
PropertyConfigurator.configure(props); 
+0

gdzie powinienem uzyskać Właściwości? –

+0

Można go znaleźć w 'java.util.Properties' - przepraszam powinno być jasne, – robjohncox

+0

Jeśli użyję Twojego wariantu, otrzymam następujące polecenie: log4j: WARN Nie znaleziono aplikatorów dla programu rejestrującego (com.messagedna.server.util.Config). log4j: WARN Proszę zainicjować system log4j poprawnie. log4j: WARN Zobacz http://logging.apache.org/log4j/1.2/faq.html#noconfig, aby uzyskać więcej informacji. –

3

Konfiguracja log4j.properties:

log4j.rootLogger=DEBUG, A1 

log4j.logger.com.MYPACKAGE=INFO, A1 

log4j.appender.A1=org.apache.log4j.ConsoleAppender 
+0

i nie ma sposobu, aby to zrobić w kodzie? –

+0

Rozumiem. i do jakiego miejsca mam umieścić ten plik? do pakietu używam rejestratora? –

+0

Ok wygląd: http://stackoverflow.com/questions/8965946/configuring-log4j-loggers- programowo, ale nie polecam, po co komplikować everithing, gdy nie jest to potrzebne – surfealokesea

1

skoro chcesz to zrobić tylko za pomocą kodu

Oto alternatywa.

Czy to na początku, statyczne inicjalizacji kod zadziała

logger = Logger.getLogger(Class.getName(), factory); 
logger.setLevel(Level.INFO); 

Mimo, że tam nie ma usprawiedliwienia dla nie używając log4j.xml. Jest bardzo łatwy w użyciu.

+0

która fabryka miała na myśli? –

+1

każda klasa, która implementuje LoggerFactory –

Powiązane problemy