Eclipseでプロジェクトを実行しているときにログが作成されますが(ライブラリ処理オプション:生成されたJARに必要なライブラリを抽出する)、構成ファイルが見つかりませんログは生成されません。Eclipseで作成されたRunnable jarファイルの外部log4j2構成ファイルを指定する方法
コマンドライン(実行可能なjarファイルを含むディレクトリにcd)を介してjarファイルを実行すると、次が出力されます。メッセージの
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オプションがコマンドに追加されたときに、次の例外が(以前のエラーメッセージに加えて)発生:私はC」と-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)
:/ 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")
IもBasicConfigurator.configure()とPropertyConfigurator.configure()は、元のlog4j(log4jの-1.2からインポートorg.apache.log4j.BasicConfiguratorとにPropertyConfiguratorをインポートからの方法を用いて試みた:以下のオプションを試してみました。 17.jar)。
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を使用していません。
* "構成ファイルが見つかりません" *は、構成ファイルをjarファイルにパッケージ化しなかったことを意味します。 – Andreas
私はsrcディレクトリと "Add to Build Path"オプションを有効にしたサブディレクトリ内に直接設定ファイルを置こうとしました。 Eclipseがjarファイルをパッケージ化するように設定ファイルをどこに置くべきですか? もっと重要なのは、私の質問は、(ユーザーが設定できるようにファイルシステム上にある)jarファイルに含まれていない構成ファイルをどのように利用できるかということです。それも可能ですか? – Jayden67