$ Java -Dlog4j.configuration=file:///path/to/your/log4j2.xml -jar /path/to/your/jar_file.jar
コンソールに書かれて、あなたは得る
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
しかし、構成ファイルが見つかり、解析可能でなかったようにも見えます:
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.
私はしばらくこの問題に取り組んできました。この投稿で説明されているようにすべてを変更しましたが、エラーが発生したとさえ考えました。その場合は、.xmlまたは.propertiesファイルの設定を変更するときにプロジェクトを必ず削除してください。 Eclipse環境。 [プロジェクト]-> [クリーン]を選択します
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
「log4j2」として知られるlog4jのバージョン2を使用するには
-Dlog4j.configuration=
読むべき
-Dlog4j.configurationFile=
log4j:WARN ....
プロジェクトで、log4j-1.2 jarをアンインクルードし、代わりにlog4j-1.2-api-2.1.jarをインクルードします。 log4j 1.2を正確に除外する方法がわかりませんでした。私のプロジェクトの依存関係がそれを必要としていることを知っていました。ですから、少し読んで、たくさんのものを除外しました。
<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>
どの除外がトリックを行ったかはわかりません。それとは別に、2.xにブリッジする1.2 APIへの依存関係を含めました。
<!--
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>
これで、コンソールにのみ送られていた1.2ログは、実際には2.xアペンダーに流れます。
クラスパスにlog4j-1.2.jarの運勢が Renkoのコメントで指摘されている がない場合、メッセージno log4j2のみが表示されます。構成ファイルが見つかりました。
構成ファイルにエラーがある場合、これは問題です。起動時に問題の場所がわからないためです。
たとえば、log4j2の処理に失敗するlog4j2.yamlファイルがある場合、たとえば、 プロジェクトにYAMLパーサーを設定していない 、または設定が単純に間違っているためです。 no log4j2 configuration file foundメッセージが表示されますが、詳細情報はありません。これは、log4j2が 見つかった最初の構成ファイルの処理を試みる のみであるため、有効なlog4j2.xmlファイルがある場合でも当てはまります。
問題をデバッグするための最良の方法は、 上記 のコマンドライン引数に従って、使用する設定ファイルを明示的に指定することです。
-Dlog4j.configurationFile=
これが、クラスローダーがlog4j2構成ファイルまたは構成内の他の何かを見つけられないことが実際に原因であるかどうかを特定するのに役立つことを願っています。
更新
以下のプロパティを使用して、ステータスロガーのデフォルトレベルを変更し、詳細情報を取得することもできます。
-Dorg.Apache.logging.log4j.simplelog.StatusLogger.level=<level>
Java mavenプロジェクトでHive jdbcを使用していますが、同じ問題があります。
私の方法は、src/main/Java/resourcesの下にlog4j2.xmlファイルを追加することです
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>
私は同じ問題を抱えていましたが、この問題についてネットで読んだ後、プロジェクトにlog4j2.xmlがないことに気づいたので、メモ帳で関連コードをコピーし、メモ帳ファイルを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>
<Root level="DEBUG">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
ロギングを確認するためにチェックするもの、
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
val logConfig: PropertiesConfiguration = new PropertiesConfiguration("application.properties")
System.setProperty("log4j.configurationFile", logConfig.getString("log4j.config.file"))
println("log4j.configurationFile :: " + System.getProperty("log4j.configurationFile"))
または
Configurator.initialize(null, logConfig.getString("log4j.config.file"));
また、自動検出が行われている場合、ファイル名がlog4j。*ではなくlog4j2。*であることを確認してください
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.0</version>
</dependency>
JSONパーサーが見つからない場合、これは例外をスローする可能性があります
[Fatal Error] log4j2.json:1:1: Content is not allowed in prolog.
Srcフォルダーからlog4j2ファイルが削除されたため、このエラーが発生しています。
Srcフォルダーの下にxmlファイルを追加するだけです
<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>
私の場合、私のgradleプロジェクトのクラスパスでlog4j2 Jsonファイルlog4j2.json
を使用していますが、同じエラーが発生しました。
ここでの解決策は、JSON処理の依存関係を私の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'
log4j2のドキュメント も参照してください:
JSONサポートでは、Jackson Data Processorを使用してJSONファイルを解析します。これらの依存関係は、構成にJSONを使用するプロジェクトに追加する必要があります。
ビルドパスを構成することにより、この問題を解決しました。ここに私が従ったステップがあります:Eclipseで。
今、あなたは実行することができるはずです
これは、Webサーブレットで実際のlog4j2構成ファイルが見つかる前にスローされることがあります。少なくとも私の場合はそう思う。 Cuzはすでにweb.xmlにあります
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>classpath:log4j2-app.xml</param-value>
</context-param>
そして、log4j-webソースをチェックします;クラスで
org.Apache.logging.log4j.web.Log4jWebInitializerImpl
行があります。
String location = this.substitutor
.replace(this.servletContext.getInitParameter("log4jConfiguration"));
これらはすべて、構成が見つかる前の一時的なログであると考えさせられます。
log4j2.*
フォルダーの下にlog4j.*
ファイルの代わりに.../src/main/resources
ファイルを配置したことを確認してください。