2013-07-03 5 views
5

Non utilizzo i file config o xml per la configurazione di log4j poiché non è necessario configurarlo in profondità. Ho solo bisogno di stampare messaggi sulla console. così faccio questo:Come configurare log4j per registrare solo messaggi info e superiori?

BasicConfigurator.configure(); 

e di stampare solo informazioni e messaggi superiori faccio questo:

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

Ma comunque io vedo messaggi di debug nella console troppo. Ma ho solo bisogno di informazioni e in realtà di messaggi di errore da stampare.

Come fare questo?

UPD: Ho creato un file di configurazione con la quale contiene, come descritto nel tutorial qui: manual il seguente:

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 

ho messo al com.messagedna

In ogni classe Ho bisogno di logger in ho scritto quanto segue:

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

ma w uando ho eseguito la mia app ottengo il seguente:

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

Il tuo log4j vive nella root del tuo file system ?! –

+1

Non posso operare con questi concetti.Intendi dove si trova il file di configurazione o cos'altro? –

risposta

5

Siete solo impostando il livello per i messaggi registrati utilizzando il registratore per MyClass.class, tuttavia eventuali messaggi a livello di debug su altri logger verrà comunque stampato.

Quello che è veramente necessario fare è impostare il livello di registro sul gestore di log della console (che è responsabile della stampa di tutti i messaggi di registro sulla console). Tuttavia, fare ciò mentre si utilizza BasicConfigurator sarà abbastanza complicato da fare, è meglio passare alla configurazione della registrazione specificata in un file di proprietà (che è molto più flessibile).

Suggerirei di lavorare attraverso lo log4j logging configuration tutorial - questo ti aiuterà a mettere insieme esattamente la configurazione che desideri, e dovrebbe dimostrarti un utile investimento del tuo tempo. Tuttavia, se si desidera ottenere questo fatto in fretta, prova ad aggiungere il contenuto di seguito al file 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 

E poi cambiare il codice per effettuare le seguenti operazioni:

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

dove dovrei ottenere le proprietà? –

+0

Questo si trova in 'java.util.Properties' - mi dispiace dovrebbe averlo chiarito – robjohncox

+0

Se uso la tua variante ottengo il seguente: log4j: WARN Non è stato possibile trovare nessun allegato per il logger (com.messagedna.server.util.Config). log4j: WARN Si prega di inizializzare correttamente il sistema log4j. log4j: WARN Vedi http://logging.apache.org/log4j/1.2/faq.html#noconfig per maggiori informazioni. –

3

Configurare log4j.properties:

log4j.rootLogger=DEBUG, A1 

log4j.logger.com.MYPACKAGE=INFO, A1 

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

e non c'è modo di farlo in codice? –

+0

Vedo. e a quale posto devo mettere questo file? al pacchetto utilizzo il logger? –

+0

Ok look: http://stackoverflow.com/questions/8965946/configuring-log4j-loggers-programmatically ma non lo consiglio, perché complicare everithing quando non ne ha bisogno – surfealokesea

1

Dal momento che voglio usare per farlo solo con il codice

Ecco un'alternativa.

fare questo alla partenza, un'inizializzazione del codice statico funzionerà

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

Detto questo, theres nessuna scusa per non usare log4j.xml. È molto facile da usare.

+0

quale fabbrica intendevi? –

+1

qualsiasi classe che implementa LoggerFactory –