java - found - log4j2 ejemplo
Cómo configurar log4j.properties para SpringJUnit4ClassRunner? (7)
Agregue un archivo log4j.properties (log4j.xml) con al menos un appender en la raíz de su classpath.
El contenido del archivo (log4j.properties) puede ser tan simple como
log4j.rootLogger=WARN,A1
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c %x - %m%n
Esto habilitará el log4j logging con el nivel de registro predeterminado como WARN
y usará la consola java para registrar los mensajes.
De repente, esto sigue sucediendo durante una prueba JUnit. Todo estaba funcionando, escribí algunas pruebas nuevas y ocurrió este error. Si lo revierto, no desaparecerá. ¿Porqué es eso?
log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Como no me gusta tener archivos duplicados (log4j.properties en prueba y principal), y tengo muchas clases de prueba, cada uno corre con la clase SpringJUnit4ClassRunner, así que tengo que personalizarlo. Esto es lo que uso:
import java.io.FileNotFoundException;
import org.junit.runners.model.InitializationError;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.util.Log4jConfigurer;
public class MySpringJUnit4ClassRunner extends SpringJUnit4ClassRunner {
static {
String log4jLocation = "classpath:log4j-oops.properties";
try {
Log4jConfigurer.initLogging(log4jLocation);
} catch (FileNotFoundException ex) {
System.err.println("Cannot Initialize log4j at location: " + log4jLocation);
}
}
public MySpringJUnit4ClassRunner(Class<?> clazz) throws InitializationError {
super(clazz);
}
}
Cuando lo use, reemplace SpringJUnit4ClassRunner con MySpringJUnit4ClassRunner
@RunWith(MySpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:conf/applicationContext.xml")
public class TestOrderController {
private Logger LOG = LoggerFactory.getLogger(this.getClass());
private MockMvc mockMvc;
...
}
Estaba usando Maven en eclipse y no quería tener una copia adicional del archivo de propiedades en la carpeta raíz. Puedes hacer lo siguiente en eclipse:
- Abrir diálogo de ejecución (haga clic en la pequeña flecha al lado del botón de reproducción y vaya a ejecutar configuraciones)
- Ir a la pestaña "classpath"
- Seleccione las "Entradas de usuario" y haga clic en el botón "Avanzado" en el lado derecho.
- Ahora seleccione el botón de opción "Agregar carpeta externa".
- Seleccione la carpeta de recursos
Las nuevas pruebas que escribió (directa o indirectamente) usan clases que se registran usando Log4j .
Log4J necesita ser configurado para que este registro funcione correctamente.
Coloque un archivo log4j.properties (o log4j.xml) en la raíz de su classpath de prueba .
Debe tener alguna configuración básica, como
# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
# An alternative logging format:
# log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n
Un appender emite a la consola de forma predeterminada, pero también puede establecer explícitamente el objetivo de esta manera:
log4j.appender.A1.Target=System.out
Esto redirigirá todos los resultados en un formato agradable a la consola. Más información se puede encontrar aquí en el manual de Log4J ,
Log4J Logging se configurará correctamente y esta advertencia desaparecerá.
Sé que esto es viejo, pero también estaba teniendo problemas. Para Spring 3 usando Maven y Eclipse, tuve que poner log4j.xml en src / test / resources para que la prueba de la Unidad se registrara correctamente. Colocarte en la raíz de la prueba no funcionó para mí. Espero que esto ayude a otros.
Si no quiere molestarse con un archivo, puede hacer algo como esto en su código:
static
{
Logger rootLogger = Logger.getRootLogger();
rootLogger.setLevel(Level.INFO);
rootLogger.addAppender(new ConsoleAppender(
new PatternLayout("%-6r [%p] %c - %m%n")));
}
Tengo log4j.properties configurado correctamente. Ese no es el problema. Después de un tiempo descubrí que el problema estaba en Eclipse IDE, que tenía una compilación antigua en "caché" y no creaba una nueva (problema de dependencia de Maven). Tuve que construir el proyecto manualmente y ahora funciona.