varios rootcategory que logger log implementar conversionpattern archivo appenders java eclipse junit log4j

java - rootcategory - La salida de Log4j no se muestra en la consola de Eclipse



que es log4j java (17)

Por alguna razón, mi consola Eclipse ya no muestra las instrucciones de Log4j INFO y DEBUG cuando ejecuto las pruebas de JUnit. En términos de código no ha habido ningún cambio, por lo que debe tener algo que ver con la configuración de Eclipse.

Todo lo que hago en mi prueba de unidad es el siguiente y, por alguna razón, SOLO se muestra la instrucción ERROR en la consola de Eclipse. ¿Por qué? ¿Dónde buscaré pistas?

public class SampleTest { private static final Logger LOGGER = Logger.getLogger(SampleTest.class); @Before public void init() throws Exception { // Log4J junit configuration. BasicConfigurator.configure(); LOGGER.info("INFO TEST"); LOGGER.debug("DEBUG TEST"); LOGGER.error("ERROR TEST"); } }

Detalles:

  • log4j-1.2.6.jar
  • junit-4.6.jar Eclipse
  • IDE para desarrolladores de Java, versión: lanzamiento de Helios, id de compilación: 20100617-1415

Agregue una dependencia de prueba a su pom a slf4j.

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>${slf4j.version}</version> <scope>test</scope> </dependency>


Busque en el archivo log4j.properties o log4j.xml para el nivel de registro. Probablemente está configurado en ERROR lugar de DEBUG


Compruebe su archivo log4j.properties

Ver ejemplo fácil aquí en here .


Configurando con BasicConfigurator.configure(); configura un juego básico de consola de consola en la depuración. Un proyecto con la configuración anterior y ningún otro código (a excepción de una prueba) debe producir tres líneas de registro en la consola. No puedo decir nada más que "funciona para mí".

¿Ha intentado crear un proyecto vacío con solo log4j y junit, con solo el código de arriba y ejecutarlo?

Además, para poder @Before método @Before :

@Test public void testname() throws Exception { assertTrue(true); }

EDITAR:

Si ejecuta más de una prueba a la vez, cada una de ellas llamará a init antes de ejecutar.

En este caso, si tuviera dos pruebas, la primera tendría un registrador y la segunda prueba llamaría a init nuevamente, haciéndolo registrar dos veces (inténtelo); debería obtener 9 líneas de inicio de sesión en la consola con dos pruebas.

Es posible que desee utilizar un método de inicio estático anotado con @BeforeClass para evitar esto. Aunque esto también sucede en los archivos, es posible que desee consultar la documentación de TestSuites en JUnit 4. Y / o llamar a BasicConfigurator.resetConfiguration(); en una clase anotada @AfterClass, para eliminar todos los registradores después de cada clase de prueba / conjunto de pruebas.

Además, el registrador raíz se reutiliza, de modo que si configura el nivel del registrador raíz en un método de prueba que se ejecuta antes, mantendrá esta configuración para todas las demás pruebas que se ejecuten más adelante, incluso si están en archivos diferentes. (no sucederá al restablecer la configuración).

Testcase - esto causará 9 líneas de registro:

import static org.junit.Assert.assertTrue; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; import org.junit.Before; import org.junit.Test; public class SampleTest { private static final Logger LOGGER = Logger.getLogger(SampleTest.class); @Before public void init() throws Exception { // Log4J junit configuration. BasicConfigurator.configure(); } @Test public void testOne() throws Exception { LOGGER.info("INFO TEST"); LOGGER.debug("DEBUG TEST"); LOGGER.error("ERROR TEST"); assertTrue(true); } @Test public void testTwo() throws Exception { LOGGER.info("INFO TEST"); LOGGER.debug("DEBUG TEST"); LOGGER.error("ERROR TEST"); assertTrue(true); } }

Cambiar el método init se reduce a las seis líneas exceptuadas:

@BeforeClass public static void init() throws Exception { // Log4J junit configuration. BasicConfigurator.configure(); }

Su problema probablemente se debe a alguna otra clase de prueba o conjunto de pruebas donde el nivel de registro del registrador raíz está configurado en ERROR y no se restablece.

También puede probar esto reiniciando en el método @BeforeClass, antes de configurar el registro.

Tenga en cuenta que estos cambios podrían romper el registro esperado para otros casos de prueba hasta que se solucione en todos los lugares. Sugiero probar cómo funciona esto en un área de trabajo / proyecto separado para tener una idea de cómo funciona.


Hay un caso que hago: la excepción ocurre en algún lugar, pero la detecté sin imprimir nada, por lo que el código ni siquiera llegó al código log4j, por lo que no hubo salida.


La ventana de la consola de Eclipse tiene una propiedad de filtro (en algunos casos solo el sistema.err está activo).

Haga clic derecho en la ventana de la consola de Eclipse -> Preferencias -> Consola y asegúrese de que casilla de verificación

Mostrar cuando el programa escribe en estándar

está activo.

Alternativamente, puede configurar log4j para escribir siempre en System.err de esta manera:

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="AppConsole" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.err" /> <param name="Encoding" value="ISO-8859-15" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{dd.MM.yyyy HH:mm:ss} %5p kontext.%c{1}:%L - %m%n" /> </layout> </appender> <root> <level value="debug" /> <appender-ref ref="AppConsole" /> </root> </log4j:configuration>


Mi situación se resolvió especificando el argumento de VM para el programa JAVA que se está depurando, asumo que también puede configurar esto en el archivo `eclipse.ini también:


Pensé que esto era un defecto genuino, pero resultó que el tamaño de mi consola era limitado, y causó que el contenido anterior pasara de 80000 caracteres para ser cortado.

Haga clic derecho en la consola para las preferencias y aumente el límite de tamaño de la consola.


Se asegura de que al ejecutar los casos de prueba de junit, tiene el archivo log4j.properties o log4j.xml en su carpeta de prueba / recursos.


Suena como log4j recoge otro archivo de configuración que el que crees que hace.

Coloque un punto de interrupción en log4j donde se abre el archivo y eche un vistazo a los archivos getAbsolutePath ().


Una cosa a tener en cuenta, si tiene un archivo log4j.properties en su ruta de clase, no necesita llamar a BasicConfigurator. Una descripción de cómo configurar el archivo de propiedades está here .

Podría identificar si su IDE está causando el problema al intentar ejecutar esta clase desde la línea de comandos con log4j.jar y log4j.properties en su classpath.


Una vez tuve un problema como este, cuando descargué una biblioteca de Amazon (para los servicios web de Amazon) y ese archivo jar contenía un log4j.properties y de alguna manera se usó en lugar de mi viejo y antiguo log4j configurado. Vale la pena un cheque.


Vaya a Ejecutar configuraciones en su eclipse, luego los argumentos -VM agregan esto: -Dlog4j.configuration = log4j-config_folder / log4j.xml

reemplace log4j-config_folder con su estructura de carpetas donde tenga su archivo log4j.xml


Verifique los archivos de configuración log4j en su directorio de salida (es decir, bin o target / classes) o dentro de los artefactos de proyecto generados (.jar / .war / .ear). Si esto está en su ruta de clase, es recogido por log4j.


Verifique que su log4j.properties o log4j.xml se copien en su ruta de BasicConfigurator.configure() IDE y se BasicConfigurator.configure() al llamar a BasicConfigurator.configure()


Yo tenía el mismo error.

Estoy usando Jboss 7.1 AS. En el archivo de configuración - standalone.xml edite la siguiente etiqueta. (Detén tu servidor y edita)

<root-logger> <level name="ALL"/> <handlers> <handler name="CONSOLE"/> <handler name="FILE"/> </handlers> </root-logger>

El ALL tiene el rango más bajo posible y está destinado a activar todo el registro.


si el archivo log4j.xml no está en el proyecto, y está usando tomcat, intente ir a la instancia de tomcat y busque log4j. Intente cambiar el nivel de ConsoleAppender para depurar y volver a implementar la aplicación en Tomcat. Eso podría ayudar.