2012-01-20 19 views
18

Ecco il messaggio di errore -Si prega di inizializzare il sistema log4j avviso correttamente

log4j:WARN No appenders could be found for logger (SerialPortUtil). 
log4j:WARN Please initialize the log4j system properly. 
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 

Ecco l'invocazione della classe SerialPortUtil -

private static final Logger log = Logger.getLogger(SerialPortUtil.class.getSimpleName()); 
. 
. 
. 
log.info("Serial port " + port.getName() + " is available"); 

Ecco il contenuto del mio file log4j.properties -

log4j.rootLogger=DebugAppender 

#Debug logging 
log4j.appender.DebugAppender=org.apache.log4j.RollingFileAppender 
log4j.appender.DebugAppender.Threshold=DEBUG 
log4j.appender.DebugAppender.File=activityLog.log 
log4j.appender.DebugAppender.MaxFileSize=200KB 
log4j.appender.DebugAppender.MaxBackupIndex=5 
log4j.appender.DebugAppender.layout=org.apache.log4j.PatternLayout 
log4j.appender.DebugAppender.layout.ConversionPattern=%d{DATE} %t - %m%n 

E il file delle proprietà si trova sul classpath.

Tutto sembra giusto per me, quindi cosa sta succedendo? La soglia DEBUG non deve anche acquisire la registrazione INFO?

+0

hai provato a eseguire con -Dlog4.debug = true? Questo potrebbe offrire più informazioni. – oers

+0

@oers, No..Non ho. – mre

+1

possibile duplicato di [Come inizializzare log4j correttamente?] (Http://stackoverflow.com/questions/1140358/how-to-initialize-log4j-properly) –

risposta

5

Va bene, così ho ottenuto lavorando modificando questa

log4j.rootLogger=DebugAppender 

a questo

log4j.rootLogger=DEBUG, DebugAppender 

A quanto pare è necessario specificare il livello di registrazione al rootLogger prima? Mi scuso se ho sprecato il tempo di nessuno.

Inoltre, ho deciso di rispondere alla mia domanda perché questo non era un problema di classpath.

8

Dal link nel messaggio di errore:

Ciò si verifica quando i file di configurazione e log4j.properties log4j.xml di default non possono essere trovati e l'applicazione esegue alcuna configurazione esplicita. log4j utilizza Thread.getContextClassLoader(). getResource() per individuare i file di configurazione predefiniti e non controlla direttamente il file system. Conoscere la posizione appropriata per posizionare log4j.properties o log4j.xml richiede la comprensione della strategia di ricerca del caricatore di classi in uso. log4j non fornisce una configurazione predefinita poiché l'output sulla console o sul file system potrebbe essere vietato in alcuni ambienti. Vedi anche FAQ: Perché log4j non può trovare le mie proprietà in un'applicazione J2EE o WAR ?.

Impossibile trovare il file di configurazione. Stai usando xml o un file di proprietà ??

Inoltre, utilizzare logback!

+0

Come menzionato nella domanda, sto usando un file di proprietà. E come accennato anche nella mia domanda, il file delle proprietà si trova sul classpath, quindi cosa dà? – mre

+0

giusto. Si noti che la configurazione xml offre FILTRI in aggiunta che potrebbero essere utili alcune volte. Sono contento che tu abbia funzionato. – Gevorg

1

provare a fare qualcosa di simile a quanto segue in principale:

public static void main(String[] args) { 
    PropertyConfigurator.configure(args[0]); 
    //... your code 

dovete dire log4j quale sia la sua configurazione dovrebbe essere.

0

Ciò che ha funzionato per me è creare un file di proprietà log4j (è possibile trovare molti esempi sulla rete) e inserirlo nella cartella delle proprietà nella directory del progetto (creare questa cartella se non le esclusioni). Il tasto destro del mouse sulla cartella e Build Path->Use as Source Folder.

Spero che aiuti!

2

Se si verifica l'errore/avviso quando si esegue un programma che utilizza log4j, la soluzione è aggiungere un log4j.properties che può essere visualizzato dal programma di caricamento classi.Normalmente è nella cartella "src" del progetto Java: Aggiungere il seguente contenuto nel file

log4j.rootLogger=INFO, 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{ABSOLUTE} %5p %c{1}:%L - %m%n 
1

Aggiungere il codice

BasicConfigurator.configure(); 

nella classe principale statico seguente ..

Nota: aggiungi "\ hadoop-2.7.1 \ share \ hadoop \ common \ lib \ commons-logging-1.1.3.jar & \ hadoop-2.7.1 \ share \ hadoop \ common \ lib \ log4j- 1.2.17.jar " come i riferimenti esterni

import org.apache.log4j.BasicConfigurator; 

public class ViewCountDriver extends Configured implements Tool{ 

    public static void main(String[]args) throws Exception{ 

     BasicConfigurator.configure(); 

     int exitcode = ToolRunner.run(new ViewCountDriver(), args); 
     System.exit(exitcode); 
    } 
} 
2

La correzione per me è stato quello di mettere "log4j.properties" nella cartella "src". Non ha funzionato nella mia cartella dei pacchetti deve essere uno alla radice stessa della fonte. Aggiungerlo al percorso di costruzione che poi lo sposta nelle "Biblioteche di riferimento" non ha funzionato.

Per ripetere: inserire log4j.properties nella directory principale della cartella src.

I miei file log4j.properties presentano il seguente contenuto che funziona sull'ultima versione di Spring Tool Suite basata su Eclipse.

# Configure logging for testing: optionally with log file 
#log4j.rootLogger=INFO, stdout 
log4j.rootLogger=WARN, stdout, logfile 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n 

log4j.appender.logfile=org.apache.log4j.FileAppender 
log4j.appender.logfile.File=target/spring.log 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m% 
1

Per aggiungere a @Gevorg, se si dispone di una situazione simile Spark in esecuzione a livello locale, inserire il file nella cartella log4j.properties risorse denominate sotto la cartella principale.

Problemi correlati