Log4j2は、ドキュメントに記載されているとおり、ルートクラスパスのlog4j2.xml
構成ファイルを介してSpring Bootとうまく連携しています。
ただし、このファイルを別の場所に移動しようとすると、起動時に新しい場所をSpringに渡すことができません。 ドキュメント から:
さまざまなロギングシステムは、クラスパスに適切なライブラリを含めることでアクティブ化でき、クラスパスのルートまたはSpring Environmentによって指定された場所に適切な構成ファイルを提供することでさらにカスタマイズできますプロパティ
logging.config
。
Javaシステムプロパティで新しい場所を設定してみました
Java -jar -Dlogging.config="classpath:/config/log4j2.xml" target/app.jar
または、関連するプロパティを含む外部application.properties
を使用する
logging.config=classpath:/config/log4j2.xml
しかし、次のエラーメッセージが定期的に表示されます。
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Springリファレンスドキュメント で指定されているように、logging.config
プロパティは、ロギングがすでに初期化された後に読み取られるため、アプリケーションプロパティの中で設定することはできません。
解決策は、次のように外部ロギング構成へのパスを提供することです。
Java -Dlogging.config='/path/to/log4j2.xml' -jar app-current.jar
micpalmia の答えは完全に正しいです。
構成ファイルをパラメーターとして渡したくないクラスパスの外側に構成を配置する必要がありました。だから私はクラスパスリソースに非常に単純なログ設定を入れて、春のブートアプリケーションが開始時にログを再設定するようにしました、のように:
@SpringBootApplication
public class Application implements CommandLineRunner {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... param) throws UnsupportedEncodingException {
Configurator.initialize(null, "config/log4j2.xml");
// ...
}
}
このアプローチには重大な欠点があります。アプリケーションの起動プロセス全体が外部で構成されたものとして記録されません。しかし、カスタムコードが実行されると、ロガーは意図したとおりに機能します。あなたはそうではないかもしれませんが、これは私が共存できる妥協案だと思います。
Log4j2ドキュメント here で述べたように、log4j2.component.properties
という名前のファイルをリソースフォルダー(またはクラスパスの任意の場所)に含めることができ、そのファイル内にファイルの名前を指定できます次のような場所(または新しいファイル名):
log4j.configurationFile=path/to/log4j2.xml
または
log4j.configurationFile=classpath:log4j2-custom.xml (if the file is on the classpath)
代わりに、前述のようにcontext-param
のweb.xml
フィールドを使用して設定ファイルの場所を指定できます here ですが、そのオプションは試していません
(これはSpring Bootでも機能します)
私のプロジェクトにも同じ問題があります。log4j2.xmlの他に、クラスパスに他の構成ファイルも必要です。ここに私の2つの解決策があります:
解決策1:org.springframework.boot.loader.JarLauncherを使用してSpringブートアプリケーションを開始する
Java -classpath SpringBootProject.jar;./config org.springframework.boot.loader.JarLauncher
解決策2:jarのMANIFEST.MFに「./config」クラスパスエントリを書き込む
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Class-Path>./config/</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.3.RELEASE</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
プロパティファイルの場合:
Java -Dlog4j.configuration = file:/path/to/log4j.properties -jar app.jar
コマンドラインには、Spring Boot 2で機能します。パスの前にfile:を追加することを忘れないでください。