He hecho todo lo posible para configurar el eclipse y mi aplicación Java para usar un archivo log4j.properties. Sin embargo, no parece estar usando el archivo de propiedades y no estoy seguro de por qué.Aplicación Java: Hacer que Log4j funcione dentro del entorno Eclipse
Bibliotecas: slf4j-api-1.6.1, SLF4J-jdk14-1.6.1
Dentro de la aplicación del registro funciona bien. Puedo imprimir información, advertencias y errores en la consola de eclipse.
Lo que me gustaría hacer es cambiar el nivel de registro para depurar e imprimir todos los mensajes de registro tanto en la consola como en un archivo de registro.
He creado un archivo log4j.properties que tiene este aspecto:
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
Mi Estructura del directorio es el siguiente:
My Project
--src/
----MYProject/
------*.java
--bin/
----MYProject/
------*.class
--log4j/
----log4j.properties
en Eclipse fui a: Ejecutar Configuraciones -> ruta de clases (pestaña) -> Clic derecho en "Entradas de usuario" -> Se agregó "log4j" como una nueva carpeta "y guardado.
Luego en mi código llamo al registrador como este (sa MPLE código para demostrar mi acercamiento por lo que puede tener errores de sintaxis):
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");
}
}
entonces yo llamo algunMetodo e imprime INFO, WARN, ERROR a la consola de Eclipse. No imprimirá DEPURACIÓN y no se imprimirá en un archivo.
Agradecería cualquier sugerencia sobre lo que puedo estar haciendo mal.
He jugado con tus comentarios y apines y esto es lo que he descubierto. No puedo agregar PropertyConfigurator con mi configuración actual, ya que es una propiedad de la biblioteca log4j y no una parte de la biblioteca slf4j-jdk14 (la carpeta log4j de slf4j, según tengo entendido). Establecer los parámetros de VM en verdadero no devuelve ninguna depuración adicional. – Bryce
Si luego hago referencia a la biblioteca log4j real además de slf4j-jdk14 empiezo a obtener resultados de depuración. Solo al agregar la referencia, mi archivo log4j.properties comienza a funcionar. Esto parecería obtener el 90% de lo que necesito. Esto aumenta la depuración pero los comandos que imprimo en la clase dada en la publicación inicial ya no se imprimen (test_logger.debug, test_logger.info, etc.). Creo que esto se debe a que la biblioteca log4j que agregué sobrescribió org.slf4j.Logger que estaba usando anteriormente. Estoy un poco confundido sobre cómo lograr que estas dos bibliotecas funcionen mejor juntas, ¿alguna sugerencia? – Bryce
slf4j es solo una fachada para el registro, aún debe agregar la biblioteca de registro real (log4j en su caso) a su classpath. Vea este enlace: http://slf4j.org/manual.html#binding –