warn mkyong logger found for example ejemplo could appenders java logging log4j

java - mkyong - Establecer log4j nivel de registro



log4j:warn no appenders could be found for logger (6)

Usando otro archivo de configuración

Quizás podrías apuntar a otro archivo de configuración.

java -Dlog4j.configuration=config file yourApp

Dónde:

  • config , su archivo de configuración, por ejemplo, log4j.properties o log4j.xml .
  • file , el archivo de registro, por ejemplo, myApp.log
  • su aplicación, su aplicación, por ejemplo, MyAppGUI

O puedes usar una clase

java -Dlog4j.configurationClass=config class yourApp

Dónde:

  • config , su archivo de configuración, por ejemplo, log4j.properties o log4j.xml .
  • class , cualquier clase de inicialización personalizada, como LogManager , debe implementar org.apache.log4j.spi.Configurator
  • su aplicación, su aplicación, por ejemplo, MyAppGUI

Puede ver más en Apache log4j 1.2 - Breve introducción a log4j en la sección Procedimiento de inicialización predeterminado .

Modificando el nivel programáticamente

Además, también puede usar los métodos que ofrece la clase Logger , como public void setLevel(Level level) , por ejemplo:

Logger.getRootLogger().setLevel(Level.TRACE);

Ya que solo desea realizar pruebas, puede utilizarlas. Pero se recomienda no utilizar en el código del cliente porque sobrescriben los parámetros de configuración predeterminados en el código rígido. La mejor manera es usar un archivo de configuración externo.

Actualmente estoy trabajando en un proyecto que utiliza log4j. Estoy ejecutando un testcase (junit) y me gustaría configurar el nivel de registro para rastrear de manera que pueda ver si todos los valores son correctos. Las clases que utilizan el registro en el proyecto contienen una línea como la siguiente:

private static final Log LOG = LogFactory.getLog(MatchTaskTest.class);

y utilizar un como este para hacer la depuración real

LOG.trace("value");

Nunca he usado log4j antes, ¿alguien sabe cómo puedo cambiar el nivel de registro solo para el testcase, de preferencia simplemente definiendo un parámetro en el cuadro de diálogo de configuración de ejecución de eclipse?


De hecho, lo puse en el método @Before. Pero creo que podría (y debería) colocarse en @BeforeClass.

Si lo configuras en el cuerpo de la clase obtendrás errores de compilación.


En tu clase junit ponemos:

Logger.getRootLogger().setLevel(Level.TRACE);

En algún lugar antes de la ejecución del método probado. Establecerá el nivel de umbral del registrador raíz en TRACE.


No creo que esto sea posible.

El archivo de configuración le permitirá configurar qué mensajes de registro realmente aparecen en el registro, no a qué nivel se registrará cada mensaje. Esto tiene sentido: la configuración no debe afectar el nivel del mensaje.

El Logger tiene un método para cada nivel de registro y un método de registro genérico, que toma una prioridad, por lo que no estoy seguro de que se establezca un valor predeterminado.

Puede establecer un archivo de configuración explícitamente en la línea de comandos a través de -Dlog4j.configuration=<FILE_PATH> , por lo que puede configurar una configuración específica para ese caso de prueba.


No tengo idea de por qué algunos de los anteriores no funcionaron para mí. (No quiero escribir el archivo de configuración). siguientes trabajos para mi

Logger log1 = Deencapsulation.getField(Some.class,"logger"); log1.setLevel(Level.DEBUG);


Si está utilizando Maven, puede tener dos archivos de configuración log4j:

  • uno en src / main / resources, que contiene su configuración de registro de producción
  • uno en src / test / resources, que contiene su configuración de registro de tiempo de prueba

Maven utilizará automáticamente este último en el momento de la prueba y lo agrupará en su artefacto (JAR, WAR, etc.) para que se use en producción. No tienes que perder el tiempo con los interruptores de la línea de comandos ni nada.