2009-10-06 15 views
11

Sto tentando di utilizzare log4j tramite la registrazione commons e riscontrare problemi se il file delle proprietà log4j non è denominato log4.properties. Viene visualizzato il seguente errore: log4j: WARN Impossibile trovare appender per il logger (LogMePlease). log4j: WARN Si prega di inizializzare correttamente il sistema log4j.file di proprietà commons-logging e log4j

Il mio codice è molto semplice:

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

public class LogMePlease 
{ 
static Log l = LogFactory.getLog(LogMePlease.class); 

public static void main(String [] args) 
{ 
    l.warn("Hello World!"); 
} 
} 

Nel mio percorso di classe, ho: commons-logging.properties file che contiene i seguenti voci

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger 
log4j.configuration=log4j-test.properties 

e log4j- test.properties file

quando ho eseguito questo codice ottengo

log4j:WARN No appenders could be found for logger (LogMePlease). 
log4j:WARN Please initialize the log4j system properly. 

Se rinominare il file log4j-test.properties essere log4j.properties - allora tutto funziona. Quindi, la domanda è: come posso impostare la registrazione dei comuni per usare il nome arbitrario per il file log4j.properties.

risposta

10

Il file commons-logging.properties viene letto solo dalla registrazione di comuni mentre log4j cerca log4j.configuration nelle proprietà di sistema.

Quindi è necessario specificarli con -Dlog4j.configuration=log4j-test.properties sulla riga di comando come opzione JVM oppure è necessario chiamare System.setProperty() prima della prima chiamata a qualsiasi metodo di registrazione (che di solito è piuttosto difficile da ottenere).

Nota: se possibile, utilizzare la configurazione XML log4j.xml; è molto più semplice e potente per la configurazione di log4j.

1

è necessario aggiungere il protocollo per la parte anteriore del valore della proprietà di sistema in questo modo: -Dlog4j.configuration = file: //log4j-test.properties

senza il protocollo apparirà nel classpath.

0

jul - commons-logging, piace la tua situazione.

org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl 
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger 
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog 
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger 

impostare log4j.properties, prima dell'istanza di Registro.

System.setProperty("log4j.configuration", "log4j.properties");