Back to Vapor

ロギング {#logging}

docs/basics/logging.ja.md

latest4.9 KB
Original Source

ロギング {#logging}

Vapor のロギング API は SwiftLog を基に構築されています。これは、Vapor が SwiftLog のバックエンド実装と互換性があることを示しています。

ロガー {#logger}

Logger のインスタンスはログメッセージを出力するために使用されます。Vapor はロガーにアクセスするためのいくつかの簡単な方法を提供しています。

リクエスト {#request}

各入力 Request には、そのリクエストに固有のログを使用するためのユニークなロガーがあります。

swift
app.get("hello") { req -> String in
    req.logger.info("Hello, logs!")
    return "Hello, world!"
}

リクエストロガーには、ログの追跡を容易にするために、入力リクエストを識別するユニークな UUID が含まれています。

[ INFO ] Hello, logs! [request-id: C637065A-8CB0-4502-91DC-9B8615C5D315] (App/routes.swift:10)

!!! info ロガーメタデータは、デバッグログレベルまたはそれ以下でのみ表示されます。

アプリケーション {#application}

アプリの起動や設定中のログメッセージには、Application のロガーを使用します。

swift
app.logger.info("Setting up migrations...")
app.migrations.use(...)

カスタムロガー {#custom-logger}

ApplicationRequest にアクセスできない状況では、新しい Logger を初期化できます。

swift
let logger = Logger(label: "dev.logger.my")
logger.info(...)

カスタムロガーは設定されたロギングバックエンドに出力されますが、リクエスト UUID のような重要なメタデータは付加されません。可能な限りリクエストやアプリケーション固有のロガーを使用してください。

レベル {#level}

SwiftLog はいくつかの異なるログレベルをサポートしています。

namedescription
traceプログラムの実行を追跡する際に通常のみ役立つ情報を含むメッセージに適しています。
debugプログラムをデバッグする際に通常のみ役立つ情報を含むメッセージに適しています。
info情報メッセージに適しています。
noticeエラー条件ではないが、特別な処理が必要な条件に適しています。
warningエラー条件ではないが、noticeよりも重大なメッセージに適しています。
errorエラー条件に適しています。
critical通常は直ちに注意が必要な重大なエラー条件に適しています。

critical メッセージがログに記録されると、ログバックエンドはシステム状態をキャプチャするために重い操作(スタックトレースのキャプチャなど)を自由に実行できます。

デフォルトでは、Vapor は info レベルのログを使用します。production 環境で実行する場合は、パフォーマンス向上のためにnoticeが使用されます。

ログレベルの変更 {#changing-log-level}

環境モードに関係なく、ログの量を増減するためにログレベルをオーバーライドできます。

最初の方法は、アプリケーションを起動する際にオプションの --log フラグを渡すことです。

sh
swift run App serve --log debug

2番目の方法は、LOG_LEVEL 環境変数を設定することです。

sh
export LOG_LEVEL=debug
swift run App serve

これらの操作は、Xcodeで App スキームを編集することで行うことができます。

設定 {#configuration}

SwiftLog は、プロセスごとに一度 LoggingSystem をブートストラップすることによって設定されます。Vapor プロジェクトでは、これは通常 entrypoint.swift で行われます。

swift
var env = try Environment.detect()
try LoggingSystem.bootstrap(from: &env)

bootstrap(from:) は、コマンドライン引数や環境変数に基づいてデフォルトのログハンドラーを設定するために Vapor が提供するヘルパーメソッドです。デフォルトのログハンドラーは、ANSI カラーサポートを備えた端末へのメッセージ出力をサポートしています。

カスタムハンドラー {#custom-handler}

Vaporのデフォルトのログハンドラーをオーバーライドし、独自のものを登録することができます。

swift
import Logging

LoggingSystem.bootstrap { label in
    StreamLogHandler.standardOutput(label: label)
}

SwiftLog がサポートするすべてのバックエンドは Vapor と互換性があります。ただし、コマンドライン引数や環境変数を使用したログレベルの変更は、Vapor のデフォルトのログハンドラーとのみ互換性があります。