ログ構成
ログは、システムの監視と障害の特定にとって非常に重要です。たとえば、運用システムで問題が発生した場合、完全かつ明確なログ記録は、問題を迅速に特定するのに役立ちます。次に、Spring Boot のログのサポートを紹介します。
1. Spring Boot ログの概要
Spring Boot には、システム ログ機能を実装するための spring-boot-starter-logging ライブラリが付属しており、spring-boot-starter-logging コンポーネントはデフォルトで LogBack ログ ツールを使用します。システム動作ログはデフォルトではコンソールに出力されますが、ファイルに出力することもできます。次の例は、Spring Boot プロジェクト構成ログの機能を示しています。
pom.xml ファイルを変更し、spring-boot-starter-logging の依存関係を追加します。
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
図に示すように、プロジェクトを開始し、コンソールのログ出力を確認します。
デフォルトでは、Spring Boot は LogBack を使用してログを記録し、INFO レベルでコンソールに出力します。アプリケーションを実行すると、多くの INFO レベルのログが表示されます。
2. ログ形式を設定する
Spring Boot プロジェクトでログ機能を構成した後、独自のログ形式とカスタム記録情報をカスタマイズするにはどうすればよいですか? Spring Boot には、ログ出力形式をカスタマイズするためのlogging.pattern.console 構成項目とlogging.pattern.file 構成項目が用意されています。logging.pattern.console 構成項目を application.properties ファイルに追加するだけです。
logging.pattern.console=%d{
yyyy-MM-dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
logging.pattern.file=%d{
yyyy-MM-dd-HH:mm} [%thread] %-5level %logger- %msg%n
上記の構成例では、対応する記号の意味は次のとおりです。
- %d{HH:mm:ss.SSS}: ログ出力時間。
- %thread: 出力ログのプロセス名。Web アプリケーションや非同期タスク処理で役立ちます。
- %-5level: ログ レベル。左揃えには 5 文字を使用します。
- %logger-: ログ出力者の名前。
- %msg: ログメッセージ。
- %n: プラットフォームの改行文字。
設定項目を変更したら、図に示すようにプロジェクトを再起動し、コンソールのログ出力を確認します。
Spring Boot コンソールの起動ログの形式が、構成された形式に変更されました。
3. ログ出力レベル
一般的に、システムのログ レベルは TRACE < DEBUG < INFO < WARN < ERROR < FATAL となり、徐々にレベルが高くなります。ログ レベルが INFO に設定されている場合、TRACE レベルも DEBUG レベルのログも出力されないことを意味します。
Spring Boot は、logging.level 構成項目を通じてログ出力レベルを設定します。次の例は、Spring Boot ログ出力レベルを示しています。
まず、ログ レベルのテスト クラス LogDemo を追加します。サンプル コードは次のとおりです。
@Configuration
public class LogDemo {
Logger logger = LoggerFactory.getLogger(getClass());
@Bean
public String logMethod() {
// 从trace到error日志级别由低到高
// 可以调整输出的日志级别,日志就只会在这个级别后的高级别生效
logger.trace("LogDemo trace日志...");
logger.debug("LogDemo debug日志...");
// Spring Boot默认使用的是info级别,没有指定级别就用Spring Boot默认规定的级别,即root级别
logger.info("LogDemo info日志...");
logger.warn("LogDemo warn日志...");
logger.error("LogDemo error日志...");
return "hello log";
}
}
上記の例では、ログレベルごとに 1 行が出力されます。出力のログ レベルを調整して、このレベル以降のより高いレベルでのみ有効になるようにすることができます。
次に、ログ出力レベルを構成し、application.properties に次の構成を追加します。
logging.level.root=warn
上の例では、logging.level.root を使用して、プロジェクト全体のログ レベル WARN を指定しています。もちろん、パッケージに別のログ レベルを指定することもできます。次に例を示します。
logging.level.root=INFO
logging.level.com.lxml.demo.log=WAEN
上記の構成例では、プロジェクト全体のログ レベルを INFO に設定し、指定されたパッケージ com.lxml.demo のログ レベルを WARN に設定します。
Spring Boot コンソールが出力するシステム起動ログは INFO レベルですが、com.lxml.demo.log 配下の LogDemo のログレベルが WARN に設定され、WARN、INFO、ERROR のログが出力されます。
4. ログファイルを保存します。
一般に、開発環境ではコンソールを介してログを表示するのが一般的ですが、運用環境では、将来のログ クエリに備えてログ情報をディスクに保存する必要があります。ログ情報をログファイルに保存するように設定するにはどうすればよいですか? 以下に、ログ ファイルを保存するプロセスを示します。
次の構成項目をリソース ディレクトリの application.properties 構成ファイルに追加します。
logging.file.name=D:/02Project-list/log/spring_log.log
プロジェクトを再起動すると、spring_log.log ファイルが D:/02Project-list/log/ ディレクトリに生成されていることがわかります。このファイルの内容は、図に示すように、コンソールの出力内容と一致しています。