Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Logger

💡 お知らせ: このドキュメントはAIによって翻訳されています。表現に違和感がある場合は、原文(英語)を参照するか、翻訳にご協力ください。

Flix は、構造化ログ(Structured logging)のためのライブラリエフェクトとして Logger を提供しています。Logger エフェクトにはデフォルトハンドラがあるため、main の中で明示的に runWithIO を呼び出す必要はありません。鍵となるモジュールは Logger です。

Logger エフェクト

Logger エフェクトは、指定された重大度(Severity)でメッセージをログに記録する、単一の操作を持ちます。

pub eff Logger {
    /// 指定されたメッセージ `m` を、指定された重大度 `s` でログに記録します。
    def log(s: Severity, m: RichString): Unit
}

Severity enum は、低いものから高いものまで、5 つのレベルを定義しています。

pub enum Severity with Eq, Order, ToString {
    case Trace
    case Debug
    case Info
    case Warn
    case Fatal
}

Logger モジュール

Logger モジュールは便利な関数を提供しています。

mod Logger {
    /// メッセージ `m` を Trace レベルでログに記録します。
    def trace(m: a): Unit \ Logger with Formattable[a]

    /// メッセージ `m` を Debug レベルでログに記録します。
    def debug(m: a): Unit \ Logger with Formattable[a]

    /// メッセージ `m` を Info レベルでログに記録します。
    def info(m: a): Unit \ Logger with Formattable[a]

    /// メッセージ `m` を Warn レベルでログに記録します。
    def warn(m: a): Unit \ Logger with Formattable[a]

    /// メッセージ `m` を Fatal レベルでログに記録します。
    def fatal(m: a): Unit \ Logger with Formattable[a]

注意: ログ記録用の関数は、Formattable トレイトを実装している任意の型を受け取ります。ほとんどの標準的な型(StringInt32Bool など)は Formattable を実装しているため、通常の値をそのままログに記録できます。このトレイトは値を RichString に変換します。RichString は、スタイル付きのターミナル出力(色、太字など)をサポートしています。

メッセージのログ記録

これらの便利な関数は、Formattable を実装している任意の値を受け取ります。

def main(): Unit \ { Logger } =
    Logger.info("Application started");
    Logger.debug("Loading configuration...");
    Logger.warn("Cache size exceeds threshold");
    Logger.fatal("Unrecoverable error")

デフォルトハンドラは、各メッセージを色付きの重大度プレフィックス付きで標準出力に出力します。例: [Info] Application started