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