web-dev-qa-db-ja.com

Springプロファイル、さまざまなLog4j2構成

私のapplication.ymlで私は得ました:

logging: 
  config: classpath:log4j2.debug.yml

そして、いくつかは別のプロファイルにあります。アプリケーションを起動すると、次のようになります。

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

プロファイルしたものの隣にlog4j2.xmlを置くだけで機能します。だから私はこれが依存性を見逃しているものだと思いますか、それともlog4j2では不可能ですか?

参照: Boot Logging Level は、私が試すように可能である必要があると言いますか?

9
Dennis Ich

私の側では、yamlファイルの代わりにプロパティファイルを使用しています。 2つのログファイルが必要でした。1つはすべてをコンソールに記録し、もう1つはファイルに記録します。そこで、2つのlog4j2構成ファイルを作成しました:log4j2-dev.xmlとlog4j2-file.xml。

2つのSpringプロファイルを使用します。デフォルトのプロファイルと「dev」という名前のプロファイルです。 log4j2構成ファイルを切り替えるために、以下を含むapplication.propertiesファイルを作成しました。

spring.profiles.active=
logging.config=classpath:log4j2-file.xml

また、Springが「dev」プロファイルを検出すると自動的にアクティブになるapplication-dev.propertiesという別のプロパティファイルがあります。を含む:

logging.config=classpath:log4j2-dev.xml

Log4j2-dev.xml構成を使用する場合は、application.propertiesの「spring.profiles.active =」の値として「dev」を追加するだけです。

このページでは、Feiyu Zhouの回答をご覧いただけます。彼はYaml設定ファイルを使用してソリューションを提示します: application.propertiesでlog4j2パスを定義する方法?

もちろん、application.propertiesのlogging.config属性を常に削除し、log4j2.xmlのlog4j2-file.xmlの名前を変更することもできます。これは、デフォルトでLog4j2によってロードされ、Springプロファイルによってトリガーされる必要はありません。

14
tlegrand

Log4j 2構成のマニュアルページも参照してください

Log4j2は最初にクラスパスでlog4j2-test.yamlというファイルを探し、次にJSONとXMLで同じファイルを探し、最後にクラスパスでlog4j2.ymlというファイルを探します。

構成ファイルの場所を明示的に指定することもできます。

2
Remko Popma

Spring Boot 2とlog4j2.xmlで私のために働いた解決策は次のとおりです。異なる環境とプロファイルのapplication-local.properties、application-dev.propertiesなどのファイルがあることを確認してください。

Log4j2.xmlをsrc/main/resourcesフォルダーに保存しないでください。代わりに、src/main/resourcesの下にsrc/main/resources/local src/main/resources/devなどとして作成されたプロファイル固有のフォルダーに保存してください。 application-local.propertiesのlogging.config:classpath:local/log4j2.xmlやapplication-dev.propertiesのlogging.config:classpath:dev/log4j2.xmlのようなエントリ

また、log4j2.xmlをこれらの各フォルダーに同じファイル名log4j2.xmlで保持し、アプリケーションがデフォルトで選択しないため、src/main/resourcesの下に決して保持しないでください。ご使用の環境に固有のこれらの異なるxmlが機能し、機能する場合は、それぞれに異なる構成を使用してください。また、指定されたプロファイル引数を使用してスプリングブートを実行してください。

env specific properties entry

run application for the env or profile needed

次に、環境に基づいてログファイルのパスを次のように変更できます...

    <RollingFile name="RollingFileAppender" fileName="c:\\logs\\logs_test\\og4j2-demo.log"  filePattern="c:\\logs\\logs_test\\log4j2-demo-%d{yyyy-MM-dd}-%i.log"> 
1
user1419261

Springプロファイルを使用する代わりに(アクティブにするプロファイルを明示的に設定する必要があります)、Mavenビルドプロファイルを使用してlog4j2構成ファイルを切り替えることができます。

application.yml

logging:
    config: classpath:${log4j2.config}

pom.xml

<project>
    <properties>
        <log4j2.config>log4j2.xml</log4j2.config>
    </properties>
    <profiles>
        <profile>
            <id>local</id>
            <properties>
                <log4j2.config>log4j2-local.xml</log4j2.config>
            </properties>
        </profile>
    </profiles>
</project>

このようにして、デフォルトのlog4j構成ファイル(log4j2.xml)を通常のビルドに使用できます。

そして、2番目の構成ファイル(log4j2-local.xml)は、プロジェクトがlocalビルドプロファイル(例:mvn package -Plocal)。

1
George Andrews

XMLファイルを使用してlog4j2を構成しました。私にとってうまくいったのは、_@Component_を_@PostConstruct_メソッドで追加して、ロギングを再構成したことです。

_LoggerContext context = (LoggerContext)LogManager.getContext(false);
context.setConfigLocation(URI.create("path to file"));
context.reconfigure();
_

ここで、ファイルへのパスはclasspath:log4j2-(insert spring profile here).xmlのようなものです。これを行うには、_spring-boot-starter-logging_を除外し、代わりに_spring-boot-starter-log4j2_を含める必要がありました。私は長い間このlog4j2構成を機能させるために費やしたので、おそらくこれは他の誰かを助けるでしょう。

0
knueser

Application.ymlは正しく設定されているようです。おそらく問題は、log4j2.ymlを使用するために、依存関係jackson-databindおよびjackson-dataformat-yamlをpomに追加する必要があるためでした。

Spring-boot-starter-webがあり、jackson-databindがすでにインポートされている場合は、jackson-dataformat-yamlのみが必要です。

<dependencies>
  <!-- not needed if you have spring-boot-starter-web in the classpath -->
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
  </dependency>

  <dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
  </dependency>
</dependencies>
0
Tarek