example ejemplo application java eclipse log4j

java - ejemplo - ¿No se han encontrado agregadores para el registrador(log4j)?



log4j.properties ejemplo (25)

He puesto log4j en mi ruta de acceso de compilación, pero recibo el siguiente mensaje cuando ejecuto mi aplicación:

log4j:WARN No appenders could be found for logger (dao.hsqlmanager). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

¿Qué significan estas advertencias? ¿Cuál es el appender aquí?


Agregue lo siguiente como primer código:

Properties prop = new Properties(); prop.setProperty("log4j.rootLogger", "WARN"); PropertyConfigurator.configure(prop);


Asegúrese de que el archivo de propiedades se haya establecido correctamente. Y nuevamente, parece que el compilador no puede encontrar el archivo de propiedades, se puede establecer como seguimiento en el pom (solo cuando se usa el proyecto de Maven).

<build> <sourceDirectory> src/main/java</sourceDirectory> <testSourceDirectory> src/test/java</testSourceDirectory> <resources> <resource> <directory>resources</directory> </resource> </resources> </build >


Asegúrese de que su proyecto esté abierto en Eclipse, luego haga clic en el menú "Ejecutar" en la parte superior de Eclipse y haga clic en lo siguiente:

  1. correr

  2. Ejecutar configuraciones

  3. Classpath (pestaña)

  4. Entradas de usuario

  5. agregar el tarro a la derecha

  6. agregar el archivo jar log4j

  7. Aplicar

  8. correr

El mensaje de error ya no debería aparecer.


Como se explicó anteriormente hay 2 enfoques.

El primero es agregar esta línea a tu método principal:

BasicConfigurator.configure();

El segundo enfoque es agregar este archivo log4j.properties estándar a su ruta de clase :

Mientras toma el segundo enfoque, debe asegurarse de que inicializa el archivo correctamente, por ejemplo.

Properties props = new Properties(); props.load(new FileInputStream("log4j property file path")); props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");

Asegúrese de crear la carpeta requerida para almacenar los archivos de registro.


Creo que deberías entender dónde se encuentran los archivos de configuración log4j en el archivo jar log4j o en el código Java.

src/main/resources/log4j.properties es la ruta de Eclipse. Colóquelos en una ubicación adecuada para que no tenga que codificar la ruta absoluta en el código.

Lea mi artículo y la solución de muestra para eso http://askyourquestions.info/2016/03/27/how-to-see-where-the-log-is-logger-in-slf4j/


En el eclipse de Java, copie su carpeta conf_ref a conf.


En mi caso, el error fue la bandera " aditividad ". Si es "falso" para su paquete de proyecto raíz, entonces los paquetes secundarios no tendrán un appender y verá el error " appender not found ".


Esta breve introducción a la guía log4j es un poco antigua pero sigue siendo válida.

Esa guía le brindará información sobre cómo usar registradores y agregadores.

Solo para ponerte en marcha tienes dos enfoques simples que puedes tomar.

El primero es agregar esta línea a tu método principal:

BasicConfigurator.configure();

El segundo enfoque es agregar este log4j.properties estándar (tomado de la guía mencionada anteriormente) a su ruta de clase:

# 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


Esto es sólo una advertencia.

Fijación

Esto ocurre cuando los archivos de configuración predeterminados log4j.properties y log4j.xml no se pueden encontrar y la aplicación no realiza una configuración explícita.

Para solucionarlo, simplemente cree / copie log4j.properties o log4j.xml en su ubicación en la ruta de clase (generalmente lo mismo que los archivos jar).

Opcionalmente, configure la opción java: -Dlog4j.configuration=file:///path/to/log4j.properties .

log4j utiliza Thread.getContextClassLoader().getResource() para localizar los archivos de configuración predeterminados y no comprueba directamente el sistema de archivos. Conocer la ubicación adecuada para colocar log4j.properties o log4j.xml requiere comprender la estrategia de búsqueda del cargador de clases en uso. log4j no proporciona una configuración predeterminada ya que la salida a la consola o al sistema de archivos puede estar prohibida en algunos entornos.

Depuración

Para la depuración, puede intentar usar el parámetro -Dlog4j.debug=true .

Configuración de log4j.properties

Configuración de muestra de log4j.properties :

# 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 # Print only messages of level WARN or above in the package com.foo. log4j.logger.com.foo=WARN

Aquí hay otro archivo de configuración que usa varios agregadores:

log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller''s file name and line number. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=example.log log4j.appender.R.MaxFileSize=100KB # Keep one backup file log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

Apache Solr

Si usa Solr , copie <solr>/example/resources/log4j.properties en una ubicación en la ruta de <solr>/example/resources/log4j.properties .

La configuración de muestra de log4j.properties de Solr es como:

# Logging level solr.log=logs/ log4j.rootLogger=INFO, file, CONSOLE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x /u2013 %m%n #- size rotation with log cleanup. log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.MaxFileSize=4MB log4j.appender.file.MaxBackupIndex=9 #- File to log to and log format log4j.appender.file.File=${solr.log}/solr.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m/n log4j.logger.org.apache.zookeeper=WARN log4j.logger.org.apache.hadoop=WARN # set to INFO to enable infostream log messages log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

Ver también:


La instalación de Mi Eclipse no pudo encontrar log4j.properties al ejecutar pruebas JUnit desde Eclipse, a pesar de que el archivo se encontraba en src/test/resources .

La razón fue que Eclipse (o el conector m2e ) no copió el contenido de src/test/resources en la carpeta de salida target/test-classes esperada target/test-classes - la causa principal fue que en las propiedades del proyecto bajo Java Build Path -> Source source - > Carpetas de origen en la ruta de compilación -> src / test / resources , de alguna manera hubo una entrada Excluded: ** . Quité esa entrada excluida .

Alternativamente, podría haber copiado manualmente src/test/resources/log4j.properties para target/test-classes/log4j.properties .


La mayoría de las respuestas aquí sugirieron que el archivo log4j.properties se coloque en la ubicación correcta (para el proyecto de Maven, debe estar ubicado en src/main/resources )

Pero para mí, el problema es que mi log4j.properties no está configurado correctamente. Aquí hay una muestra que funciona para mí, puedes probarla primero.

# Root logger option log4j.rootLogger=INFO, stdout # Direct log messages to stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


La razón puede ser la falta de la palabra static en algunos:

final static Logger logging = Logger.getLogger(ProcessorTest.class);

Si hago que el registrador sea el campo de instancia, recibo exactamente esta misma advertencia:

No appenders could be found for logger (org.apache.kafka.producer.Sender)

Lo que es peor, la advertencia apunta no a ProcessorTest , donde vive el error, sino a una clase absolutamente diferente (Remitente) como fuente de problemas. Esa clase tiene set logger correcto y no necesita ningún cambio! ¡Podríamos buscar el problema por años!


La solución en este sitio funcionó para mí https://crunchify.com/java-how-to-configure-log4j-logger-property-correctly/ . Ahora no veo advertencias en absoluto de log4j

Puse esto en un archivo log4j.properties que puse en src / main / resources

# This sets the global logging level and specifies the appenders log4j.rootLogger=INFO, theConsoleAppender # settings for the console appender log4j.appender.theConsoleAppender=org.apache.log4j.ConsoleAppender log4j.appender.theConsoleAppender.layout=org.apache.log4j.PatternLayout log4j.appender.theConsoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n


Log4J muestra este mensaje de advertencia cuando el código Java de Log4j está buscando crear una primera línea de registro en su programa.

En este momento, Log4j hace 2 cosas.

  1. busca encontrar el archivo log4j.properties
  2. Busca para instanciar el appender definido en log4j.properties

Si log4J no encuentra el archivo log4j.properties o si el aplicador declarado en log4j.rootlogger no está definido en log4j.properties otra log4j.properties archivo log4j.properties se muestra el mensaje de advertencia.

PRECAUCIÓN: el contenido del archivo de propiedades debe ser correcto.

El siguiente contenido NO es correcto

log4j.rootLogger=file log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=c:/Trace/MsgStackLogging.log log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%m%n log4j.appender.FILE.ImmediateFlush=true log4j.appender.FILE.Threshold=debug log4j.appender.FILE.Append=false

¡porque el file appender se declara en LOWER-CASE en la declaración log4j.rootlogger y se define en la declaración log4j.appender usando UPPER-CASE!

Un archivo correcto sería

log4j.rootLogger=FILE log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=c:/Trace/MsgStackLogging.log log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%m%n log4j.appender.FILE.ImmediateFlush=true log4j.appender.FILE.Threshold=debug log4j.appender.FILE.Append=false

Si se usa MAVEN, debe poner los archivos log4j.properties en src/main/resources Y comenzar una compilación de MAVEN.

El archivo Log4j.properties luego se copia en target/classes carpeta target/classes .

¡Log4J usa el archivo log4j.properties que encontró en target/classes !


Me encontré con este problema cuando intenté construir un jar ejecutable con maven en intellij 12. Resultó que debido a que el archivo de manifiesto java no incluía una ruta de clase, el archivo de propiedades log4j no se podía encontrar en el nivel raíz (donde archivo jar fue ejecutado desde.)

Para tu información yo estaba recibiendo el registrador de esta manera:

Logger log = LogManager.getLogger(MyClassIWantedToLogFrom.class);

Y pude hacerlo funcionar con un archivo pom que incluía esto:

<plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.2-beta-5</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>com.mycompany.mainPackage.mainClass</mainClass> </manifest> <manifestEntries> <Class-Path>.</Class-Path> <!-- need to add current directory to classpath properties files can be found --> </manifestEntries> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>


Me enfrenté al mismo problema cuando uso log4j2. Mi problema es causado por usar una biblioteca dependiente incorrecta:

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <scope>runtime</scope> </dependency>

En su lugar, debería usar:

<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <scope>runtime</scope> </dependency>

En mi caso, tengo un log4j2.xml definido en mi directorio de "recursos", y especificado para usarlo por:

System.setProperty("log4j.configurationFile", "log4j2.xml");


Me sale el mismo error. Aquí el problema que lleva a este mensaje de error:

Creo algunos objetos que usan el registrador antes de configurar el log4j:

Logger.getLogger(Lang.class.getName()).debug("Loading language: " + filename);

Solución: configure log4j al principio en el método principal:

PropertyConfigurator.configure(xmlLog4JConfigFile); // or BasicConfigurator.configure(); if you dont have a config file


Otra razón por la que esto puede suceder (en RCP4) es que está utilizando varios marcos de trabajo de registro en su archivo de destino. Como ejemplo, esto ocurrirá si usa una combinación de slf4j, log4j y ch.qos.logback.slf4j en la pestaña de contenido de los archivos de destino.


Parece que necesita agregar la ubicación de su archivo log4j.properties a la Classpath en Eclipse.

Asegúrese de que su proyecto esté abierto en Eclipse, luego haga clic en el menú "Ejecutar" en la parte superior de Eclipse y haga clic en lo siguiente:

  1. correr
  2. Ejecutar configuraciones
  3. Classpath (pestaña)
  4. Entradas de usuario
  5. Avanzado (botón a la derecha)
  6. Añadir carpetas
  7. luego navegue a la carpeta que contiene su archivo log4j.properties
  8. Aplicar
  9. correr

El mensaje de error ya no debería aparecer.


Primera importación:

import org.apache.log4j.PropertyConfigurator;

Luego agregue el siguiente código al método principal:

String log4jConfPath ="path to/log4j.properties"; PropertyConfigurator.configure(log4jConfPath);

Cree un archivo en la ruta y agregue el siguiente código a ese archivo.

log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n


Si log4j.properties está de hecho en la ruta de log4j.properties , está usando Spring Boot para hacer un archivo WAR para implementarlo en un servidor de aplicaciones, está omitiendo un archivo web.xml a favor de la configuración automática de Spring Boot y no recibe ningún mensaje de registro. En cualquier caso, necesita configurar Log4j explícitamente. Suponiendo que está utilizando Log4j 1.2.x:

public class AppConfig extends SpringBootServletInitializer { public static void main( String[] args ) { // Launch the application ConfigurableApplicationContext context = SpringApplication.run( AppConfig.class, args ); } @Override protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) { InputStream log4j = this.getClass().getClassLoader().getResourceAsStream("log4j.properties"); PropertyConfigurator.configure(log4j); return application; } // Other beans as required... }


Si trabajas en conjunto con muchos proyectos, puedes enfrentar un problema de estilo.

* tienes que tener un archivo lof4j.properties y este archivo está incluido en las propiedades de registro de otro proyecto.

* Además, puede intentar colocar los archivos de propiedades log4j en la ruta src cuando el proyecto funciona Linux OS, las bibliotecas de otros proyectos y los archivos log4.properties pueden estar debajo de una carpeta en una ubicación en el classpath.


Solución rápida:

  1. Añadir código a la función principal :

    String log4jConfPath = "/path/to/log4j.properties"; PropertyConfigurator.configure(log4jConfPath);

  2. crear un archivo llamado log4j.properties en / ruta / a

    log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n


Tal vez el proyecto relevante contenga log4j en la ruta de compilación java, agrego mahout_h2o cuando encontré este problema en un proyecto mahout usando eclipse, ¡funciona!


Utiliza el registrador en su código para registrar un mensaje. El Appender es un objeto agregado a un Logger para escribir el mensaje en un destino específico. Hay FileAppender para escribir en archivos de texto o ConsoleAppender para escribir en la Consola. Necesitas mostrar tu código de configuración de Logger y Appender para obtener más ayuda.

lea el tutorial para comprender mejor la interacción entre Logger y Appender.