Skip to content

Commit

Permalink
Merge pull request #854 from devlights/add-slog-example
Browse files Browse the repository at this point in the history
  • Loading branch information
devlights authored Sep 26, 2024
2 parents 876bf95 + 8e05a4e commit 3b3513f
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 0 deletions.
8 changes: 8 additions & 0 deletions examples/slog/03.default-logger/Taskfile.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# https://taskfile.dev

version: '3'

tasks:
default:
cmds:
- go run .
58 changes: 58 additions & 0 deletions examples/slog/03.default-logger/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
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")

return nil
}

0 comments on commit 3b3513f

Please sign in to comment.