Upgrade to Pro — share decks privately, control downloads, hide ads and more …

slogパッケージ超入門 Kyoto.go #43 オフラインLT会@マネフォ京都)

Kota
July 14, 2023

slogパッケージ超入門 Kyoto.go #43 オフラインLT会@マネフォ京都)

Kyoto.go #43 オフラインLT会@マネフォ京都の登壇資料です。
Go1.21で導入予定のslogパッケージの紹介をしました。

合わせて、Blogも公開しておりますので参考にして下さい。

Kyoto.go #43: https://kyotogo.connpass.com/event/287778/
Blog: https://zenn.dev/88888888_kota/articles/7e97ff874083cf

Kota

July 14, 2023
Tweet

Other Decks in Programming

Transcript

  1. slogパッケージ超入門
    Kyoto.go #43 オフラインLT会@マネフォ京都
    2023/07/14
    @88888888_kota
    1

    View Slide

  2. 自己紹介
    八木 洸太(88888888_kota)
    大阪府立大学・情報工学課程・ 4回生
    ポジション
    ● バックエンド(Go)
    最近
    ● Finatextでインターン
    趣味
    ● アニメ(今期おすすめ:無職転生)
    ● 今年は人生初コミケに!
    (https://github.com/yagikota)
    2

    View Slide

  3. 目次
    ● slogの開発経緯について
    ● slogのデザインについて
    ● slogの基本機能について
    ● まとめ
    3

    View Slide

  4. slogの開発経緯
    4

    View Slide

  5. 従来のlogパッケージ
    https://pkg.go.dev/log
    課題
    ● 構造化ロギングのサポートなし
    ● ログレベルのサポートなし
    zap、logrus、zerologといったサードパーティーライブラリを利用する必要があった
    → アプリケーションごとに使用しているロギングライブラリが異なり、出力の一貫性がな

    5

    View Slide

  6. slogの登場
    https://pkg.go.dev/golang.org/x/exp/slog(試験的な実装)
    ● 前述の課題を解決すべく、Go1.21で導入される予定(2023/8)
    ● structured loggingの略
    ● 読み方は「スロッグ」
    ○ slog考案者Jonathan Amsterdamがセッションでこのように発音していた
    6

    View Slide

  7. slogのデザイン
    7

    View Slide

  8. アーキテクチャ
    Record
    ● Loggerの出力メソッドを呼び出す
    ごとに作成されるログレコード
    Handler
    ● slogのバックエンド
    ● ログの出力フォーマットと出力先を
    決める
    Logger
    ● slogのフロントエンド
    ● 開発者がログを生成するために
    呼び出す出力メソッドを提供
    8

    View Slide

  9. アーキテクチャ
    ログレベルがINFOのログをJSON形式で出力
    Logger Handler
    Record
    出力結果
    HandlerからLogger生成
    Loggerのメソッドでログ生成
    ログ生成の流れ
    JSONで出力
    logger.Info(“Info message”)
    logger.Info(“Info message”)
    time=2023-07-09T13:33:07.016874+09:00
    level=INFO
    msg=Info message"
    9

    View Slide

  10. slogの基本機能
    10

    View Slide

  11. デフォルトロガー
    パッケージのトプレベル関数からアクセスできるデ
    フォルトのロガーを提供している
    デフォルトの出力は
    ● INFOレベル以上
    ● プレーンテキスト
    となっている
    出力結果
    出力されない
    JSONではない
    11

    View Slide

  12. ログレベル、出力形式のカスタマイズ
    DEBUG以上のログをJSONで出力
    ● Handlerで出力形式やその他オプションを設
    定してあげる
    slogでは以下のHandlerが提供されている
    ● JSONHandler
    ● TextHandler
    出力結果
    DEBUG以上に
    JSON形式で
    12

    View Slide

  13. ログメッセージ追加
    logger.Info(message string, args … any)
    ● argsに(key,value)の順にログメッセージを追
    加できる
    ● リテラルではなく、関数を用いていた方がよ

    ● ミスを防げるし、パフォーマンス的にもよい
    出力結果
    13
    推奨
    key,valueの指定
    をミスるとこのよう
    になる

    View Slide

  14. などなど... 他にも色々機能が!
    14

    View Slide

  15. まとめ
    15

    View Slide

  16. まとめ
    Go1.21で導入予定のslogパッケージに関する概要を紹介
    ● slogのデザイン
    ○ Logger
    ○ Record
    ○ Handler
    ● slogの基本機能
    ○ デフォルトのロガー
    ○ ログレベル、出力形式のカスタマイズ
    ○ ログメッセージ追加
    細かい機能については、ブログに記載してます。
    16

    View Slide

  17. 参考文献
    ● Design Doccument
    ○ https://go.googlesource.com/proposal/+/master/design/56345-structured-logging.md
    ● Discussion
    ○ https://github.com/golang/go/discussions/54763
    ● Proposal
    ○ https://github.com/golang/go/issues/56345
    ○ https://github.com/golang/go/issues/58243
    ● セッション
    ○ https://opensourcelive.withgoogle.com/events/go-day-2022/watch?talk=talk2
    ● ブログ記事
    ○ https://betterstack.com/community/guides/logging/logging-in-go/
    ○ https://www.sobyte.net/post/2022-10/go-slog/
    ○ https://zenn.dev/88888888_kota/articles/7e97ff874083cf
    17

    View Slide