私の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 は、私が試すように可能である必要があると言いますか?
私の側では、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プロファイルによってトリガーされる必要はありません。
Log4j2は最初にクラスパスでlog4j2-test.yaml
というファイルを探し、次にJSONとXMLで同じファイルを探し、最後にクラスパスでlog4j2.yml
というファイルを探します。
構成ファイルの場所を明示的に指定することもできます。
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が機能し、機能する場合は、それぞれに異なる構成を使用してください。また、指定されたプロファイル引数を使用してスプリングブートを実行してください。
次に、環境に基づいてログファイルのパスを次のように変更できます...
<RollingFile name="RollingFileAppender" fileName="c:\\logs\\logs_test\\og4j2-demo.log" filePattern="c:\\logs\\logs_test\\log4j2-demo-%d{yyyy-MM-dd}-%i.log">
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
)。
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構成を機能させるために費やしたので、おそらくこれは他の誰かを助けるでしょう。
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>