Ho fatto del mio meglio per configurare eclipse e la mia applicazione Java per utilizzare un file log4j.properties. Tuttavia, sembra che non stia utilizzando il file delle proprietà e non sono sicuro del perché.Applicazione Java: utilizzo di Log4j per lavorare all'interno dell'ambiente Eclipse
Biblioteche: slf4j-api-1.6.1, SLF4J-jdk14-1.6.1
All'interno dell'applicazione la registrazione funziona bene. Sono in grado di stampare informazioni, avvisi ed errori nella console di Eclipse.
Quello che vorrei essere in grado di fare è modificare il livello del registro per eseguire il debug e stampare tutti i messaggi di registrazione sia sulla console sia su un file di registro.
ho creato un file log4j.properties che assomiglia a questo:
log4j.rootLogger=DEBUG,console,file
log4j.rootCategory=DEBUG, R, O
# Stdout
log4j.appender.O=org.apache.log4j.ConsoleAppender
# File
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=log4j.log
# Control the maximum log file size
log4j.appender.R.MaxFileSize=100KB
# Archive log files (one backup file here)
log4j.appender.R.MaxBackupIndex=5
log4j.appender.file.File=checkLog.log
log4j.appender.file.threshold=DEBUG
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.O.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
log4j.appender.O.layout.ConversionPattern=[%d{ISO8601}]%5p%6.6r[%t]%x - %C.%M(%F:%L) - %m%n
La mia struttura directory simile a questa:
My Project
--src/
----MYProject/
------*.java
--bin/
----MYProject/
------*.class
--log4j/
----log4j.properties
in Eclipse sono andato a: Run Configurazioni -> Classpath (scheda) -> tasto destro del mouse su "voci utente" -> aggiunto "log4j" come nuova cartella "e salvato
Quindi nel mio codice chiamo il logger come questo (sa Codice mple per dimostrare il mio approccio in modo da può avere errori di sintassi):
package MYProject;
import org.slf4j.LoggerFactory;
public class MyClass{
final org.slf4j.Logger test_logger = LoggerFactory.getLogger(MyClass.class);
public MyClass(){}
public someMethod(){
test_logger.debug("Some Debug");
test_logger.info("Some Info");
test_logger.warn("Some Warning");
test_logger.error("An Error");
}
}
Ho poi chiamo someMethod e stampe INFO, WARN, ERROR alla console eclissi. Non stamperà DEBUG e non stamperà su un file.
Apprezzerei qualsiasi suggerimento su quello che potrei fare storto.
Ho giocato con entrambi i commenti e le apine e questo è quello che ho capito. Non riesco ad aggiungere PropertyConfigurator con la mia configurazione corrente perché è una proprietà della libreria log4j e non una parte della libreria slf4j-jdk14 (legatore log4j di slf4j come la comprendo io). L'impostazione dei parametri VM su true non restituisce alcun debug aggiuntivo. – Bryce
Se faccio riferimento alla libreria log4j effettiva oltre a slf4j-jdk14, inizio a ricevere l'output di debug. Aggiungendo semplicemente il riferimento, il mio file log4j.properties inizia a funzionare. Questo sembrerebbe ottenere circa il 90% di quello di cui ho bisogno. Ciò aumenta il debug ma i comandi che stampo nella classe data nel post iniziale non vengono più stampati (test_logger.debug, test_logger.info, ecc.). Penso che questo sia dovuto al fatto che la libreria log4j che ho aggiunto sta sovrascrivendo org.slf4j.Logger che stavo usando in precedenza. Sono un po 'confuso su come far funzionare queste due librerie meglio insieme, qualche suggerimento? – Bryce
slf4j è solo una facciata per la registrazione, è comunque necessario aggiungere la libreria di registrazione effettiva (log4j nel tuo caso) al classpath. Vedi questo link: http://slf4j.org/manual.html#binding –