Eclipseで作成されたRunnablejarで外部log4j2構成ファイルを指定する方法

ジェイデン67

Eclipseでプロジェクトを実行するとログが作成されますが、実行可能なjarが作成されると(ライブラリ処理オプション:必要なライブラリを生成されたJARに抽出)、構成ファイルが見つからず、ログは生成されません。

コマンドラインからjarを実行すると(実行可能なjarを含むディレクトリにcd)、次のように出力されます。

ERROR StatusLogger Unrecognized format specifier [d]
ERROR StatusLogger Unrecognized conversion specifier [d] starting at position 16 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [thread]
ERROR StatusLogger Unrecognized conversion specifier [thread] starting at position 25 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [level]
ERROR StatusLogger Unrecognized conversion specifier [level] starting at position 35 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [logger]
ERROR StatusLogger Unrecognized conversion specifier [logger] starting at position 47 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [msg]
ERROR StatusLogger Unrecognized conversion specifier [msg] starting at position 54 in conversion pattern.
ERROR StatusLogger Unrecognized format specifier [n]
ERROR StatusLogger Unrecognized conversion specifier [n] starting at position 56 in conversion pattern.
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

メッセージの最後のビットは、どこかから構成PatternLayoutを読み取っていますが、構成ファイルが見つからないことを示しています。オプション-Dlog4j.configurationFileオプションをコマンドに追加すると、(前のエラーメッセージに加えて)次の例外が発生します。

Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException: No Configuration was provided
        at java.util.Objects.requireNonNull(Unknown Source)
        at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java
:477)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:561)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:577)
        at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:212)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextF
actory.java:242)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextF
actory.java:45)
        at org.apache.logging.log4j.LogManager.getContext(LogManager.java:174)
        at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:618)
        at test.SmokeTest.<clinit>(SmokeTest.java:41)

-Dlog4j.configurationFileの値を「c:/path/to/config/log4j2.xml」および「file:// c:/path/to/config/log4j2.xml」として指定しようとしましたが、同じエラーが発生します。例外メッセージの最後の行は、ロガーの初期化です。コードでは、次のオプションを使用してロガーを初期化しようとしました。

 - private static final Logger logger =
   LogManager.getLogger("c:/path/to/config/log4j2.xml");
 - private static final Logger logger = LogManager.getLogger("logger name specified in config file");

ファイルに書き込む前に、log4j.configurationFileシステムプロパティを設定しました。次のオプションを試しました。

- System.setProperty("log4j.configurationFile", "C:\\path\\to\\config\\log4j2.xml")
- System.setProperty("log4j.configurationFile", "file://c:/path/to/config/log4j2.xml")

また、元のlog4j(log4j-1.2.17.jar)からインポートorg.apache.log4j.BasicConfiguratorおよびPropertyConfiguratorをインポートして、BasicConfigurator.configure()メソッドとPropertyConfigurator.configure()メソッドを使用してみました。

log4j2が外部ファイルから構成を取得できなかった可能性があると考えて、log4j2.xmlファイルのコピーをプロジェクトのsrcフォルダーに置きました。次に、次のコマンドでロガーを初期化してみました。

- private static final Logger logger = LogManager.getLogger(MyClass.class.getName());
- private static final Logger logger = LogManager.getLogger(SmokeTest.class);

どちらも同じエラーを出しましたが、Eclipseから実行すると機能するのはおそらくそれが理由ですか?

また、プログラムアイコンをダブルクリックするか、-Dlog4j.configurationFileオプションを指定せずにコマンドラインから実行すると、アプリケーションは起動しますが、ログは生成されません。

この問題のトラブルシューティングを手伝ってください。さらに情報を提供する必要がある場合はお知らせください。以前に同様の質問があったことは知っていますが、自分の問題に有効な解決策を見つけることができません。実行可能なjar、Eclipse、外部log4j2構成ファイル。AntまたはMavenを使用していません。

ジェイデン67

私の問題は、ログを初期化する前にログを呼び出していたことでした。
すべてが正しくパッケージ化され、メインクラスにはlog4jの適切なコードが含まれていました。原因は、メインが実行される前に初期化されたクラスレベルのオブジェクトでした。そのオブジェクトのコンストラクターは、その作成をログに記録しました。これにより、Eclipseでのデバッグ時にエラーは発生しませんでしたが、実行可能ファイルの実行が停止しました。
新しいプロジェクトからやり直すという理想を与えてくれた@Andreasに感謝します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Log4j2:ログ構成ファイルが見つかったかどうかをコンソールログで確認する方法

分類Dev

log4j2を構成するためにWebアプリケーションの外部で任意のファイルを定義するにはどうすればよいですか?

分類Dev

実行可能JARを使用する場合のLog4j2構成ファイルの指定

分類Dev

外部log4j構成ファイル名を指定するDropwizard

分類Dev

Tomcat8.5.15でlog4j2を構成する方法

分類Dev

log4j2でStatisticsCsvLayoutを構成する方法

分類Dev

log4j2の構成ファイルを設定する必要がある頻度はどれくらいですか?

分類Dev

新しいXMLファイルを使用して実行時にlog4j2を再構成する方法

分類Dev

現在の作業ターゲットディレクトリへのログファイルパスをlog4j2 xml形式で構成する方法

分類Dev

プロパティファイルから読み取った動的に変更される構成を使用してlog4j2(v2.5)を構成できません

分類Dev

log4j2ログを指定されたサイズのファイルに1週間保持します

分類Dev

log4j2が構成ファイルを見つけられない

分類Dev

Springでのプロファイル依存のlog4j2構成

分類Dev

春のログは、jvm引数として渡されたlog4j2構成ファイルを無視します

分類Dev

LOG4J2:プログラムで構成するときに、「log4j2構成ファイルが見つかりません...」の印刷を無効にする

分類Dev

Log4j2:Yaml構成で同じタイプの複数のAppenderを構成する方法

分類Dev

複数の条件でlog4j2プロパティファイルを構成できません

分類Dev

Log4j2:構成を介してログに記録されたイベントのログレベルを変更できますか?

分類Dev

それ自体を構成するために使用したファイルをlog4jに表示させることは可能ですか?

分類Dev

Log4j2は、JVMが起動するたびに異なるファイル名で新しいファイルを作成します

分類Dev

単一のlog4j2 xmlファイルを使用したlog4j2およびlog4jの構成

分類Dev

YAMLファイルからlog4j2を自動構成する際の問題

分類Dev

Muleでlog4j2構成を動的に選択する

分類Dev

log4j2でFixedWindowRollingPolicyを構成する

分類Dev

log4j2でnullアペンダーを構成する方法

分類Dev

Spring BootでLog4J2複合構成を使用する方法

分類Dev

Springbootで外部プロパティファイルを使用してlog4j2を使用するにはどうすればよいですか?

分類Dev

Log4J2で空のファイルが作成されないようにするにはどうすればよいですか?

分類Dev

slf4j-log4j12を使用してLog4jで構成ファイルを設定する

Related 関連記事

  1. 1

    Log4j2:ログ構成ファイルが見つかったかどうかをコンソールログで確認する方法

  2. 2

    log4j2を構成するためにWebアプリケーションの外部で任意のファイルを定義するにはどうすればよいですか?

  3. 3

    実行可能JARを使用する場合のLog4j2構成ファイルの指定

  4. 4

    外部log4j構成ファイル名を指定するDropwizard

  5. 5

    Tomcat8.5.15でlog4j2を構成する方法

  6. 6

    log4j2でStatisticsCsvLayoutを構成する方法

  7. 7

    log4j2の構成ファイルを設定する必要がある頻度はどれくらいですか?

  8. 8

    新しいXMLファイルを使用して実行時にlog4j2を再構成する方法

  9. 9

    現在の作業ターゲットディレクトリへのログファイルパスをlog4j2 xml形式で構成する方法

  10. 10

    プロパティファイルから読み取った動的に変更される構成を使用してlog4j2(v2.5)を構成できません

  11. 11

    log4j2ログを指定されたサイズのファイルに1週間保持します

  12. 12

    log4j2が構成ファイルを見つけられない

  13. 13

    Springでのプロファイル依存のlog4j2構成

  14. 14

    春のログは、jvm引数として渡されたlog4j2構成ファイルを無視します

  15. 15

    LOG4J2:プログラムで構成するときに、「log4j2構成ファイルが見つかりません...」の印刷を無効にする

  16. 16

    Log4j2:Yaml構成で同じタイプの複数のAppenderを構成する方法

  17. 17

    複数の条件でlog4j2プロパティファイルを構成できません

  18. 18

    Log4j2:構成を介してログに記録されたイベントのログレベルを変更できますか?

  19. 19

    それ自体を構成するために使用したファイルをlog4jに表示させることは可能ですか?

  20. 20

    Log4j2は、JVMが起動するたびに異なるファイル名で新しいファイルを作成します

  21. 21

    単一のlog4j2 xmlファイルを使用したlog4j2およびlog4jの構成

  22. 22

    YAMLファイルからlog4j2を自動構成する際の問題

  23. 23

    Muleでlog4j2構成を動的に選択する

  24. 24

    log4j2でFixedWindowRollingPolicyを構成する

  25. 25

    log4j2でnullアペンダーを構成する方法

  26. 26

    Spring BootでLog4J2複合構成を使用する方法

  27. 27

    Springbootで外部プロパティファイルを使用してlog4j2を使用するにはどうすればよいですか?

  28. 28

    Log4J2で空のファイルが作成されないようにするにはどうすればよいですか?

  29. 29

    slf4j-log4j12を使用してLog4jで構成ファイルを設定する

ホットタグ

アーカイブ