$ Java -Dlog4j.configuration=file:///path/to/your/log4j2.xml -jar /path/to/your/jar_file.jar
Auf die Konsole geschrieben bekommen Sie
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Es sieht aber auch so aus, als ob die Konfigurationsdatei gefunden wurde und nicht analysiert werden konnte:
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.
Ich habe mich schon eine Weile mit diesem Problem beschäftigt. Ich habe alles wie in diesem Beitrag beschrieben geändert und sogar gedacht, dass Fehler aufgetreten sind. Stellen Sie in diesem Fall sicher, dass Sie das Projekt bereinigen, wenn Sie Einstellungen in der .xml- oder .properties-Datei ändern. In der Eclipse-Umgebung. Wählen Sie Projekt -> Reinigen
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
So arbeiten Sie mit Version 2 von log4j aka "log4j2"
-Dlog4j.configuration=
sollte lesen
-Dlog4j.configurationFile=
log4j:WARN ....
Deaktivieren Sie in Ihrem Projekt nicht die log4j-1.2-JAR und fügen Sie stattdessen die log4j-1.2-api-2.1.jar hinzu. Ich war mir nicht sicher, wie genau ich log4j 1.2 ausschließen soll. Ich wusste, dass die Abhängigkeit meines Projekts es erfordert. Mit etwas Lesen schloss ich also ein paar Sachen aus.
<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>
Ich bin mir nicht sicher, welcher der Ausschlüsse den Trick gemacht hat. Separat habe ich eine Abhängigkeit von der 1.2-API, die zu 2.x führt, hinzugefügt.
<!--
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>
Die 1.2-Protokolle, die nur zur Konsole gingen, fließen nun tatsächlich zu unseren 2.x-Appendern.
Wenn Sie nicht über das Vermögen von log4j-1.2.jar als Renko in seinem Kommentar in Ihrem Klassenpfad verfügen, wird nur die Nachricht no log4j2 Konfigurationsdatei angezeigt.
Dies ist ein Problem, wenn Ihre Konfigurationsdatei einen Fehler enthält, da Sie nicht wissen, wo das Problem beim Start liegt.
Zum Beispiel, wenn Sie über eine log4j2.yaml -Datei verfügen, die von log4j2 nicht verarbeitet werden kann, weil zum Beispiel Sie haben keinen YAML-Parser für Ihr Projekt konfiguriert oder Ihre Konfiguration ist einfach falsch. Sie finden die Konfigurationsdatei no log4j2 found ohne weitere Informationen. Dies ist auch der Fall, wenn Sie über eine gültige log4j2.xml-Datei verfügen, da log4j2 nur versucht, die erste gefundene Konfigurationsdatei zu verarbeiten .
Der beste Weg, das Problem zu beheben, besteht darin, die Konfigurationsdatei, die Sie verwenden möchten, explizit mit dem Befehlszeilenargument oben anzugeben.
-Dlog4j.configurationFile=
Hoffentlich hilft Ihnen das dabei herauszufinden, ob das Problem tatsächlich dadurch verursacht wird, dass Ihr Klassenladeprogramm die Konfigurationsdatei log4j2 oder etwas anderes in Ihrer Konfiguration nicht findet.
Update
Sie können auch die untenstehende Eigenschaft verwenden, um die Standardstufe des Statusprotokollierers zu ändern, um weitere Informationen zu erhalten:
-Dorg.Apache.logging.log4j.simplelog.StatusLogger.level=<level>
Ich verwende Hive jdbc in einem Java-Maven-Projekt und habe die gleichen Probleme.
Meine Methode ist das Hinzufügen einer log4j2.xml-Datei unter 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>
ich hatte dasselbe Problem, aber ich bemerkte, dass ich in meinem Projekt keine log4j2.xml habe, nachdem ich im Netz über dieses Problem gelesen hatte. Also habe ich den zugehörigen Code in einen Notizblock kopiert und die Notepad-Datei in xml zurückgesetzt und meinem Projekt unter hinzugefügt Ordnerressourcen. Für mich geht das.
<?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>
Ich erhalte diese Fehlermeldung, weil die log4j2-Datei aus meinem src-Ordner gelöscht wurde
Fügen Sie einfach die XML-Datei im src-Ordner hinzu
<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>
In meinem Fall verwende ich die log4j2 Json-Datei log4j2.json
im Klassenpfad meines Gradle-Projekts, und ich habe den gleichen Fehler erhalten.
Die Lösung bestand darin, die Abhängigkeit von JSON zu meinen Gradle-Abhängigkeiten zu erweitern.
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'
Siehe auch Dokumentation von log4j2 :
Die JSON-Unterstützung verwendet den Jackson Data Processor zum Analysieren der JSON-Datei Dateien. Diese Abhängigkeiten müssen zu einem Projekt hinzugefügt werden, das .__ verwenden möchte. JSON für die Konfiguration:
Sachen, die ich überprüfe,
mvn dependency:tree | 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
val logConfig: PropertiesConfiguration = new PropertiesConfiguration("application.properties")
System.setProperty("log4j.configurationFile", logConfig.getString("log4j.config.file"))
println("log4j.configurationFile :: " + System.getProperty("log4j.configurationFile"))
oder
Configurator.initialize(null, logConfig.getString("log4j.config.file"));
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.0</version>
</dependency>
Dies kann eine Ausnahme auslösen, wenn der Json-Parser nicht gefunden wird
[Fatal Error] log4j2.json:1:1: Content is not allowed in prolog.
Ich habe dieses Problem durch Konfigurieren des Erstellungspfads gelöst. Hier sind die Schritte, die ich befolgt habe: In Eclipse.
Jetzt sollten Sie laufen können
Dies kann manchmal vor der eigentlichen log4j2-Konfigurationsdatei auf dem Webservlet ausgelöst werden. Zumindest für meinen Fall denke ich schon. Denn ich habe bereits in meiner web.xml
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>classpath:log4j2-app.xml</param-value>
</context-param>
und Überprüfung der log4j-web-Quelle; im Unterricht
org.Apache.logging.log4j.web.Log4jWebInitializerImpl
da ist die Linie;
String location = this.substitutor
.replace(this.servletContext.getInitParameter("log4jConfiguration"));
all das lässt mich denken, dass dies ein temporäres Protokoll ist, bevor die Konfiguration gefunden wird.
Stellen Sie sicher, dass Sie ein log4j2.*
Datei anstelle eines log4j.*
Datei unter .../src/main/resources
Mappe.