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トレイトを実装している任意の型を受け取ります。ほとんどの標準的な型(String、Int32、Boolなど)は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