Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 7950

Goメモ-479 (slogメモ-03)(デフォルトロガー) - いろいろ備忘録日記

$
0
0

関連記事

Goメモ-477 (slogメモ-01)(基本的な使い方) - いろいろ備忘録日記

Goメモ-478 (slogメモ-02)(構造化ログの出力) - いろいろ備忘録日記

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。

今更ながら、Go 1.21で導入された log/slogを使ってみたりしています。

少しづつメモしていきます。今回はデフォルトロガーについて。

サンプル

package main

import (
    "context""log/slog""os"
)

func main() {
    var (
        rootCtx  = context.Background()
        ctx, cxl = context.WithCancel(rootCtx)
    )
    defer cxl()

    if err := run(ctx); err != nil {
        panic(err)
    }
}

func run(_ context.Context) error {
    //// slog.Info()のように明示的にロガーを生成せずに// 利用すると、内部でデフォルトのロガーが呼び出される。//// デフォルトロガーは以下の特徴を持つ。//    - 標準エラー出力に出力する//    - テキスト形式//    - ログレベルはInfo//// デフォルトロガーは、グローバル変数として実装されているため// 並行処理時の競合を避けるために内部で同期化されている。// そのため、高負荷な環境では若干のパフォーマンスオーバーヘッドが発生する可能性がある。//// デフォルトロガーは、アプリケーション全体で一貫したログ出力を簡単に実現できる反面、柔軟性に欠ける面がある。// 特定のモジュールや機能で異なるログ設定が必要な場合は、個別のロガーインスタンスを作成する方が良い。// (これは他の言語の場合でも同様)//
    slog.Debug("これは出力されない", "key", "value")
    slog.Info("これは出力される", "key", "value")

    //// デフォルトロガーの設定を変更するには//    slog.SetDefault()// を利用する//var (
        opt     = &slog.HandlerOptions{Level: slog.LevelDebug}
        handler = slog.NewJSONHandler(os.Stderr, opt)
        logger  = slog.New(handler)
    )
    slog.SetDefault(logger)

    slog.Debug("今度は出力される", "key", "value")
    slog.Info("これは出力される", "key", "value")

    returnnil
}

実行すると以下のように出力されます。

$ task
task: [default] go run .
2024/09/26 07:58:40 INFO これは出力される key=value
{"time":"2024-09-26T07:58:40.188093168Z","level":"DEBUG","msg":"今度は出力される","key":"value"}{"time":"2024-09-26T07:58:40.188103028Z","level":"INFO","msg":"これは出力される","key":"value"}

try-golang/examples/slog at main · devlights/try-golang · GitHub

参考情報

Goのおすすめ書籍


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。


Viewing all articles
Browse latest Browse all 7950

Trending Articles