10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Google Cloud Functions上でログレベル付きのStackdriver Loggingを利用する

Posted at

Google Cloud Functions(以下Cloud Functions)でログレベルを分けたいことあります。

よく Go (go111) で Cloud Functions を利用するのですが、標準のlogパッケージを利用しても、ログレベルを出し分けできません。

上記ドキュメントを参考にすると、 Cloud Functions では以下のような書き方になります:

func ExampleLogging(w http.ResponseWriter, r *http.Request) {
        ctx := context.Background()

        projectID := os.Getenv("GCP_PROJECT")

        client, err := logging.NewClient(ctx, projectID)
        if err != nil {
                log.Fatalf("Failed to create client: %v", err)
        }
        defer client.Close()

        logName := "cloudfunctions.googleapis.com%2Fcloud-functions"

        logger := client.Logger(logName).StandardLogger(logging.Info)
        logger.Println("info")
}

ちょっと煩雑ですね。また、logパッケージでの出力とは異なり、execution_id が付与されないため、functionの実行ごとのログがまとめて検索できません。

github.com/groove-x/cloudfunctions/log を使う

この問題を解決するサポートパッケージ github.com/groove-x/cloudfunctions/log を紹介します。

package function

import (
	"fmt"
	"net/http"

	"github.com/groove-x/cloudfunctions/log"
)

func ExampleLogging(w http.ResponseWriter, r *http.Request) {
	log.WithRequest(r)

	log.Debug("debug")
	log.Info("info")
	log.Warn("warn")
	log.Error("error")
}

シンプルですね!

結果はこちら:

image.png

log.WithRequest(r) でリクエストの情報をloggerに覚えさせることで、 execution_id や、トレースに関する情報が自動的に追加されます。

image.png

以上。

10
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?