java - ejemplo - No se encontró el archivo de configuración log4j2. Uso de la configuración predeterminada: registrar solo errores en la consola
log4j2 java (12)
Problema 1
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Solución 1
Para trabajar con la versión 2 de log4j, también conocido como "log4j2"
-Dlog4j.configuration=
tiene que leer
-Dlog4j.configurationFile=
- 1.2 manual: http://logging.apache.org/log4j/1.2/manual.html
- 2.x manual: http://logging.apache.org/log4j/2.x/manual/configuration.html
Problema 2
log4j:WARN ....
Solución 2
En su proyecto, excluya el archivo jar log4j-1.2 y, en su lugar, incluya log4j-1.2-api-2.1.jar. No estaba seguro de cómo excluir exactamente el log4j 1.2. Sabía que la dependencia de mi proyecto lo requería. Entonces, con un poco de lectura, excluí un montón de cosas.
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.8.2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.log4j</groupId>
<artifactId>log4j-core</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
No estoy seguro de cuál de las exclusiones funcionó. Por separado, incluí una dependencia a la API 1.2 que enlaza a 2.x.
<!--
http://logging.apache.org/log4j/2.0/manual/migration.html
http://logging.apache.org/log4j/2.0/maven-artifacts.html
Log4j 1.x API Bridge
If existing components use Log4j 1.x and you want to have this logging
routed to Log4j 2, then remove any log4j 1.x dependencies and add the
following.
-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.2</version>
</dependency>
Ahora, los registros 1.2 que solo iban a la consola realmente fluyen a nuestros apéndices 2.x.
$ java -Dlog4j.configuration=file:///path/to/your/log4j2.xml -jar /path/to/your/jar_file.jar
Escrito en la consola, obtienes
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Pero también parece que se ha encontrado el archivo de configuración y no se pudo analizar:
log4j:WARN Continuable parsing error 2 and column 31
log4j:WARN Document root element "Configuration", must match DOCTYPE root "null".
log4j:WARN Continuable parsing error 2 and column 31
log4j:WARN Document is invalid: no grammar found.
log4j:ERROR DOM element is - not a <log4j:configuration> element.
log4j:WARN No appenders could be found for logger (kafka.utils.VerifiableProperties).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Asegúrese de haber puesto un archivo
log4j2.*
lugar de un archivo
log4j.*
carpeta
.../src/main/resources
.
Cosas que verifico para verificar el registro,
1) Compruebe que no hay versiones oder log4j.
mvn dependency:tree | grep log ## ./gradlew dependencies | grep log
[INFO] +- com.prayagupd:log-service:jar:1.0:compile
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.6.2:compile
[INFO] +- org.apache.logging.log4j:log4j-core:jar:2.6.2:compile
[INFO] | /- commons-logging:commons-logging:jar:1.1.1:compile
2) asegúrese de configurar log4j2.json correctamente, lo que se hace con -Dlog4j.configurationFile = ???
val logConfig: PropertiesConfiguration = new PropertiesConfiguration("application.properties")
System.setProperty("log4j.configurationFile", logConfig.getString("log4j.config.file"))
println("log4j.configurationFile :: " + System.getProperty("log4j.configurationFile"))
o
Configurator.initialize(null, logConfig.getString("log4j.config.file"));
Además, si ocurre la detección automática, asegúrese de que el nombre del archivo sea log4j2. * No log4j. *
3) Otra comprobación es para el analizador de log4j2.json. Gracias equipo log4j por no proporcionar analizador dentro de la API.
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.0</version>
</dependency>
Esto podría generar una excepción si no puede encontrar el analizador json
[Fatal Error] log4j2.json:1:1: Content is not allowed in prolog.
En mi caso, estoy usando el archivo log4j2 Json
log4j2.json
en el classpath de mi proyecto gradle y obtuve el mismo error.
La solución aquí fue agregar dependencia para el manejo de JSON a mis dependencias de gradle.
compile group:"com.fasterxml.jackson.core", name:"jackson-core", version:''2.8.4''
compile group:"com.fasterxml.jackson.core", name:"jackson-databind", version:''2.8.4''
compile group:"com.fasterxml.jackson.core", name:"jackson-annotations", version:''2.8.4''
Consulte también la documentación de log4j2 :
El soporte JSON utiliza el Procesador de datos Jackson para analizar los archivos JSON. Estas dependencias deben agregarse a un proyecto que quiera usar JSON para la configuración:
Esto a veces se puede lanzar antes del archivo de configuración log4j2 real que se encuentra en el servlet web. al menos para mi caso, creo que sí. Porque ya tengo en mi web.xml
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>classpath:log4j2-app.xml</param-value>
</context-param>
y comprobando la fuente log4j-web; en la clase
org.apache.logging.log4j.web.Log4jWebInitializerImpl
ahí está la línea;
String location = this.substitutor
.replace(this.servletContext.getInitParameter("log4jConfiguration"));
todo eso me hace pensar que este es un registro temporal antes de encontrar la configuración.
Estoy trabajando en el proyecto TestNG Maven. Esto funcionó para mí al agregar la etiqueta
<resources>
en
pom.xml
, esta es la ruta de mi archivo de configuración personalizado
log4j2.xml
.
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<resources>
<resource>
<directory>src/main/java/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
<dependencies>
<dependency>
He estado lidiando con este problema por un tiempo. He cambiado todo como se describe en esta publicación e incluso pensé que se produjo un error. En ese caso, asegúrese de limpiar el proyecto al cambiar la configuración en el archivo .xml o .properties. En ambiente eclipse. Elija Proyecto -> Limpiar
He resuelto este problema configurando la ruta de compilación. Aquí están los pasos que seguí: en eclipse.
- cree una carpeta y guarde el archivo logj4 en ella.
- Escriba clic en la carpeta creada y vaya a Crear ruta.
- Haga clic en Agregar carpeta
- Elige la carpeta creada.
- Haga clic en Aceptar y Aplicar y cerrar.
Ahora deberías poder correr
Recibo este error porque el archivo log4j2 se eliminó de mi carpeta src
Simplemente agregue el archivo xml en la carpeta src
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
</Console>
<RollingFile name="RollingFile" filename="logs/B2CATA-hybrid.log"
filepattern="${logPath}/%d{yyyyMMddHHmmss}-fargo.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
<Policies>
<SizeBasedTriggeringPolicy size="100 MB" />
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.pragiti." level="trace" />
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="RollingFile" />
</Root>
</Loggers>
Si no tiene la fortuna de log4j-1.2.jar en su classpath como share , solo verá el mensaje que no se encontró el archivo de configuración log4j2 .
Este es un problema si hay un error en su archivo de configuración, ya que no se le informará dónde se encuentra el problema al inicio.
Por ejemplo, si tiene un archivo log4j2.yaml que log4j2 no puede procesar, porque, por ejemplo, no ha configurado un analizador YAML para su proyecto , o su configuración es simplemente incorrecta. Encontrará el mensaje no se encontró el archivo de configuración log4j2 , sin más información. Este es el caso incluso si tiene un archivo log4j2.xml válido, ya que log4j2 solo intentará procesar el primer archivo de configuración que encuentre .
He encontrado que la mejor manera de depurar el problema es declarar explícitamente el archivo de configuración que desea utilizar según el argumento de la línea de comandos mencionado anteriormente .
-Dlog4j.configurationFile=
Esperemos que esto lo ayude a determinar si el problema realmente es causado por su cargador de clases que no encuentra el archivo de configuración log4j2 o algo más en su configuración.
Actualizar
También puede usar la siguiente propiedad para cambiar el nivel predeterminado del registrador de estado para obtener más información:
-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=<level>
Tuve el mismo problema, pero noté que no tengo log4j2.xml en mi proyecto después de leer en la red sobre este problema, así que copié el código relacionado en un bloc de notas y volví el archivo del bloc de notas a xml y lo agregué a mi proyecto bajo el carpeta de recursos. esto funciona para mi.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
Uso hive jdbc en un proyecto java maven y tengo los mismos problemas.
Mi método es agregar un archivo log4j2.xml en src / main / java / resources
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClassName {
private static final Logger LOG = LoggerFactory.getLogger(MyClassName.class);
}
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="<your_package_name>.<your_class_name>" level="debug">
<AppenderRef ref="Console"/>
</Logger>
<Root level="WARN">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>