slogパッケージ超入門 Kyoto.go #43 オフラインLT会@マネフォ京都)
by
Kota
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
slogパッケージ超入門 Kyoto.go #43 オフラインLT会@マネフォ京都 2023/07/14 @88888888_kota 1
Slide 2
Slide 2 text
自己紹介 八木 洸太(88888888_kota) 大阪府立大学・情報工学課程・ 4回生 ポジション ● バックエンド(Go) 最近 ● Finatextでインターン 趣味 ● アニメ(今期おすすめ:無職転生) ● 今年は人生初コミケに! (https://github.com/yagikota) 2
Slide 3
Slide 3 text
目次 ● slogの開発経緯について ● slogのデザインについて ● slogの基本機能について ● まとめ 3
Slide 4
Slide 4 text
slogの開発経緯 4
Slide 5
Slide 5 text
従来のlogパッケージ https://pkg.go.dev/log 課題 ● 構造化ロギングのサポートなし ● ログレベルのサポートなし zap、logrus、zerologといったサードパーティーライブラリを利用する必要があった → アプリケーションごとに使用しているロギングライブラリが異なり、出力の一貫性がな い 5
Slide 6
Slide 6 text
slogの登場 https://pkg.go.dev/golang.org/x/exp/slog(試験的な実装) ● 前述の課題を解決すべく、Go1.21で導入される予定(2023/8) ● structured loggingの略 ● 読み方は「スロッグ」 ○ slog考案者Jonathan Amsterdamがセッションでこのように発音していた 6
Slide 7
Slide 7 text
slogのデザイン 7
Slide 8
Slide 8 text
アーキテクチャ Record ● Loggerの出力メソッドを呼び出す ごとに作成されるログレコード Handler ● slogのバックエンド ● ログの出力フォーマットと出力先を 決める Logger ● slogのフロントエンド ● 開発者がログを生成するために 呼び出す出力メソッドを提供 8
Slide 9
Slide 9 text
アーキテクチャ ログレベルが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
Slide 10
Slide 10 text
slogの基本機能 10
Slide 11
Slide 11 text
デフォルトロガー パッケージのトプレベル関数からアクセスできるデ フォルトのロガーを提供している デフォルトの出力は ● INFOレベル以上 ● プレーンテキスト となっている 出力結果 出力されない JSONではない 11
Slide 12
Slide 12 text
ログレベル、出力形式のカスタマイズ DEBUG以上のログをJSONで出力 ● Handlerで出力形式やその他オプションを設 定してあげる slogでは以下のHandlerが提供されている ● JSONHandler ● TextHandler 出力結果 DEBUG以上に JSON形式で 12
Slide 13
Slide 13 text
ログメッセージ追加 logger.Info(message string, args … any) ● argsに(key,value)の順にログメッセージを追 加できる ● リテラルではなく、関数を用いていた方がよ い ● ミスを防げるし、パフォーマンス的にもよい 出力結果 13 推奨 key,valueの指定 をミスるとこのよう になる
Slide 14
Slide 14 text
などなど... 他にも色々機能が! 14
Slide 15
Slide 15 text
まとめ 15
Slide 16
Slide 16 text
まとめ Go1.21で導入予定のslogパッケージに関する概要を紹介 ● slogのデザイン ○ Logger ○ Record ○ Handler ● slogの基本機能 ○ デフォルトのロガー ○ ログレベル、出力形式のカスタマイズ ○ ログメッセージ追加 細かい機能については、ブログに記載してます。 16
Slide 17
Slide 17 text
参考文献 ● 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