概要
よく忘れるのでここにメモメモ。。。
logパッケージで prefix を設定するとログ出力した際に付与して出力してくれるので便利なのですが
これ、LstdFlags
とかを設定している場合、日付の前に出てしまいます。
たとえば
package main import ( "log" "os" ) func main() { var ( l = log.New(os.Stderr, "DEBUG\t", log.LstdFlags) ) l.Println("helloworld") }
って状態で動かしてみると
$ go run main.go DEBUG 2022/01/07 16:12:35 helloworld
こんな感じで出ます。よく見るログの形式ってメッセージの前に DEBUG
みたいな文字が来るんですよね。
んで、これをメッセージ部分の前に出力するようにしたい。
log.Lmsgprefix フラグを設定する
logパッケージのフラグには Lmsgprefix
というフラグがあります。
このフラグを設定すると、prefixの出力位置をメッセージの前に変更してくれます。
package logging import ( "bytes" "log" "github.com/devlights/gomy/output" ) // Msgprefix -- log.Lmsgprefix フラグのサンプルです. // // REFERENCES // - https://pkg.go.dev/log@go1.17.6#pkg-constants // - https://tutuz-tech.hatenablog.com/entry/2021/01/30/192956 // - https://qiita.com/immrshc/items/a080975c6c7e23498944 func Msgprefix() error { var ( buf1 = &bytes.Buffer{} buf2 = &bytes.Buffer{} log1 = log.New(buf1, "TRACE\t", log.LstdFlags) // 行の先頭にprefixが出力される log2 = log.New(buf2, "DEBUG\t", log.LstdFlags|log.Lmsgprefix) // メッセージの手前にprefixが出力される ) for _, l := range []*log.Logger{log1, log2} { l.Println("hello world") } output.Stdoutf("[-Lmsgprefix]", buf1.String()) output.Stdoutf("[+Lmsgprefix]", buf2.String()) return nil }
実行すると以下のようになります。
gitpod /workspace/try-golang $ make run go run github.com/devlights/try-golang/cmd/trygolang -onetime -example "" ENTER EXAMPLE NAME: log_msgprefix [Name] "log_msgprefix" [-Lmsgprefix] TRACE 2022/01/07 07:15:16 hello world [+Lmsgprefix] 2022/01/07 07:15:16 DEBUG hello world [Elapsed] 73.556µs
参考情報
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場