0
0

More than 5 years have passed since last update.

glogでDebug用ログ出力の関数を作るときの注意点

Posted at

結論

以下のように、DEBUG環境変数が設定されているときに、ログ出力するような関数を定義した場合は、glog.XxxDepth(例ではglog.InfoDepth)を使いましょう。

package main

import (
    "flag"
    "fmt"
    "github.com/golang/glog"
    "os"
)

func DebugLog(v interface{}) {
    if os.Getenv("DEBUG") != "" {
        glog.InfoDepth(1, fmt.Sprintf("%#v", v))
    }
}

func main() {
    flag.Set("stderrthreshold", "INFO")
    flag.Parse()
    os.Setenv("DEBUG", "1")
    DebugLog("hoge") // ここが20行目
    DebugLog("fuga") // ここが21行目
}

出力結果は以下のようになります。

I0829 22:47:11.932758   24176 main.go:20] "hoge"
I0829 22:55:36.233685   24681 main.go:21] "fuga"

出力場所として、main.go:20 main.go:21 が情報として含まれていますね。多くの場合、DebugLog("hoge")DebugLog("fuga")が記述されている行数を出力して欲しいので、意図通りとなっています。

InfoDepthの代わりにInfoを使うとどうなるのか

以下のように Info関数を使うとどうなるかを示します。

package main

import (
    "flag"
    "fmt"
    "github.com/golang/glog"
    "os"
)

func DebugLog(v interface{}) {
    if os.Getenv("DEBUG") != "" {
        glog.Info(fmt.Sprintf("%#v", v))  // ここが12行目
    }
}

func main() {
    flag.Set("stderrthreshold", "INFO")
    flag.Parse()
    os.Setenv("DEBUG", "1")
    DebugLog("hoge")
    DebugLog("fuga")
}

出力結果は以下のようになります。

I0829 22:57:00.569297   24777 main.go:12] "hoge"
I0829 22:57:00.569872   24777 main.go:12] "fuga"

はい、hoge の出力も fugaの出力もmain.go:12として出力されてしまっています。つまり glog.Infoを呼び出している箇所ですね。これが InfoDepthを使う理由となっています。

0
0
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
0
0