web-dev-qa-db-ja.com

Spring Bootを使用してログメッセージをファイルに書き込む方法は?

コンソールではなくファイルにメッセージを記録したい。私はSpring Bootを使用しており、私の構成は次のとおりです。

application.properties:

logging.level: DEBUG
logging.level: ERROR
logging.file: ${HOME}/application.log

application.logファイルでのみINFOのログメッセージを取得していますが、ERRORおよびDEBUGメッセージも必要です。

私の要件は、error.logファイルにERRORメッセージ、debug.logにDEBUGメッセージ、info.logにINFOメッセージが必要であることです。

どんな助けも大歓迎です。

17
Qasim

Spring Bootでは、application.propertiesを使用してロギングシステムのいくつかの基本的な側面を設定できますが、 limits があります。

ロギングシステムのよりきめ細かい設定を構成するには、対象のLoggingSystemでサポートされているネイティブの構成形式を使用する必要があります。

言い換えると、プロパティで特にサポートされていないことをしたい場合は、logback.xmlファイルの追加と編集(logbackを使用していると仮定)を回避することはできません。

それでは、要件を見ていきましょう。

  1. 「コンソールにないファイルにメッセージを記録したい。」

docs によると:

デフォルトでは、Spring Bootはコンソールにのみログを記録し、ログファイルは書き込みません。コンソール出力にログファイルを追加(強調を追加)したい場合は、logging.fileまたはlogging.pathプロパティを設定する必要があります( application.propertiesの例)。

つまり、notコンソールへのロギングはプロパティを使用して実行できません。

  1. 「application.logファイルでのみ情報のログメッセージを取得していますが、エラーメッセージとデバッグメッセージも必要です。」

デフォルトでは、ERRORを含むはずのINFOレベルでSpring Bootがログを記録しますが、デフォルト設定でnot ERRORログを取得しますか?

また、各レベルではなく、ログに記録する最高レベルのみを指定し、レベルを設定するロガーを指定する必要があります。

これは機能しません:

logging.level: DEBUG
logging.level: ERROR

これは、 docs に従ってカスタムログレベルを構成する方法の例です。

logging.level.org.springframework.web:デバッグ
logging.level.org.hibernate:エラー

logging.level.*プロパティを使用して、次のようにルートロガーのレベルを設定することもできます。

logging.level.ROOT: DEBUG

ROOTロガーでDEBUGロギングを設定すると、大量のログが生成されることに注意してください。ここでテストしたところ、何もせずに起動時に約13MBのログを取得しました。

  1. 「error.logファイルにエラーメッセージ、debug.logにデバッグメッセージ、info.logに情報メッセージが必要です。」

繰り返しますが、これはプロパティのみを使用して行うことはできません。 Spring Bootでは、すべてのログを含むlogging.fileプロパティを1つだけ設定できます。

使用可能なロギングプロパティとサンプル値の完全なリストについては、 here を参照してください。

21
ci_

コンソールロギングを無効にしてファイルにのみ出力を書き込む場合は、console-appender.xmlではなくfile-appender.xmlをインポートするカスタムlogback-spring.xmlが必要です。

Spring boot docs で説明されています:

1
Sandip Adisare

ここでは、ROOTログレベルを複数のレベルに設定しようとしているため、これは機能しません。

logging.level: DEBUG
logging.level: ERROR

これらは、異なるログレベルと、最小<<最大からの順序です。

OFF << FATAL << ERROR << WARN << INFO << DEBUG << TRACE << ALL

# To set logs level as per your need.
logging.level.org.springframework = debug
logging.level.tech.hardik = trace

# To store logs to external file
# Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, your logs it won't work.      
logging.file=D:/spring_app_log_file.log

# To customize logging pattern.
logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

ログをより鮮明にカスタマイズするには、このドキュメントを通過してください。

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html

1
Hardik Patel

これらのプロパティを使用する代わりに、application.propertiesと同じフォルダにlogback.xmlを追加してみてください。 logback.xmlをログに必要な方法で構成します。

0
Jason