Go Academy · レッスン

構造化ログを使う理由

機械可読なログを記録します

レッスン 1/413 ステップ

「構造化ログを使う理由」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。

機械が読み取れるログ

従来のログは自由形式の文字列です。たとえば "user 42 logged in from 1.2.3.4" のようになります。人間には読みやすい一方で、機械から検索するのは困難です。構造化ロギングではキーと値のペアを出力するため、ログ集約システムで確実にフィルタリングや集計を行えます。

文字列ログの問題点

自由形式のテキストを解析する方法には、次のような問題があります。

  • 時間の経過とともに形式が変化する
  • 正規表現がエッジケースで壊れる
  • 「userID=42 のすべてのイベント」のような検索を簡単に実行できない

構造化ログでは、すべてのフィールドが独立した検索可能な属性になります。

slogは標準ライブラリに含まれている

Go 1.21 以降、構造化ロギングは標準ライブラリの log/slog パッケージに含まれています。外部依存関係は必要ありません。

import "log/slog"

最初の構造化ログ

最も簡単な呼び出しでは、メッセージとキーと値の属性を一緒に記録します。

package main

import "log/slog"

func main() {
    slog.Info("user logged in", "userID", 42, "ip", "1.2.3.4")
}

出力を読む

デフォルトのハンドラーは、次のような出力を生成します。

  • 2009/11/10 23:00:00 INFO user logged in userID=42 ip=1.2.3.4

各属性は独立した key=value ペアになっているため、機械で解析できます。

組み込みのログレベル

slog には4つのレベル、Debug、Info、Warn、Error が用意されています。それぞれ、メッセージとキーと値の属性を交互に受け取ります。

slog.Warn("disk almost full", "freePct", 5)
slog.Error("db connection failed", "attempt", 3)

キーと値のペア

属性は、キー、値、キー、値というように、交互に引数として渡します。奇数個の引数が余ると、特別な !BADKEY マーカー付きで記録されるため、必ずペアにしてください。

slog.Info("order placed", "orderID", 1001, "total", 49.99)

本番環境ではJSON

本番環境では通常、ログ転送システム(Loki、ELK、CloudWatch)がフィールドを自動的にインデックス化できるように JSON を出力します。slog にはそのための JSON ハンドラーが用意されており、次のレッスンで説明します。

従来のlogパッケージとの比較

従来の log パッケージは文字列を出力するだけです。slog は従来と同じような使い心地を保ちながら、コードベース全体を一度に変更することなく、構造化、ログレベル、差し替え可能なハンドラーを追加できます。

構造化の効果が大きい場面

構造化ロギングは、次のような場合に特に効果を発揮します。

  • 多数のサービスのログを一元化する場合
  • フィールドを使ってダッシュボードやアラートを構築する場合
  • ID を使ってリクエストを関連付ける必要がある場合

実行例:構造化された出力

これを実行すると、デフォルト出力に構造化された属性が表示されます。

package main

import "log/slog"

func main() {
    slog.Info("request handled",
        "method", "GET",
        "path", "/health",
        "status", 200,
        "ms", 12,
    )
}

理解度チェック

構造化ロギングについて、理解度を確認しましょう。

まとめ

構造化ログが重要な理由を学びました。

  • キーと値の属性は機械から検索できる
  • log/slog は標準ライブラリに含まれている(Go 1.21 以降)
  • 組み込みのレベルは Debug、Info、Warn、Error
  • 属性はキーと値のペアを交互に渡す

次は、テキストハンドラーと JSON ハンドラーのどちらを選ぶかを学びます。

無料で開始

AI チューターと学ぶ Go — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
51
レッスン
203

よくある質問

「構造化ログを使う理由」レッスンは無料ですか?

はい。「構造化ログを使う理由」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。

「構造化ログを使う理由」で何を学びますか?

機械可読なログを記録します ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Go Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「構造化ログを使う理由」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このGo Academyレッスンでコードを書いて実行できますか?

はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 構造化ログを使う理由
  2. slogハンドラ
  3. ログレベルと属性
  4. カスタムハンドラ
← Go Academyに戻る