概要
よく忘れるので、忘れないうちにメモメモ。
Goには、ログライブラリとしてlogパッケージが標準装備されています。
他の言語やっていた人間からすると、結構シンプルな形になっているなという印象。個人的には好きですが。
で、ちょっとクセがあって、出力する項目の設定とかをフラグで管理しています。
log.Flags()
で現在のフラグ値を取得できます。
log.SetFlags()
で新しいフラグ値を設定できます。
設定するフラグの定数は $GOROOT/src/log/log.go
にて以下のように定義されています。(go1.13.5の場合)
const ( Ldate = 1 << iota // the date in the local time zone: 2009/01/23 Ltime // the time in the local time zone: 01:23:23 Lmicroseconds // microsecond resolution: 01:23:23.123123. assumes Ltime. Llongfile // full file name and line number: /a/b/c/d.go:23 Lshortfile // final file name element and line number: d.go:23. overrides Llongfile LUTC // if Ldate or Ltime is set, use UTC rather than the local time zone LstdFlags = Ldate | Ltime // initial values for the standard logger )
デフォルト値は、log.LstdFlags
が設定されていますので、何も設定しないまま
log.Println("デフォルト状態でログ出力")
とかすると
2020/01/09 18:30:47 デフォルト状態でログ出力
みたいに出力されます。
んで、たまに日付とか時刻とか無しでそのままメッセージ出力したいときとかあるんですよね。
そういうときは、フラグの設定をしてやって、出ないようにできます。
// log.LstdFlags を 除去
log.SetFlags(log.Flags() &^ log.LstdFlags)
これで、除去できます。
また、とりあえず全設定を落としたい場合は以下でも良いです。
log.SetFlags(0)
サンプル
package log_ import "log" // Flags は、log.Flag()とlog.SetFlags()の挙動を確認するサンプルです. func Flags() error { // ---------------------------------------------------------------- // log.Flags()とlog.SetFlags()について // // log.Flags() は、現在設定されているログの設定フラグを取得することが出来る. // log.SetFlags()は、新たにログの設定フラグを設定することが出来る. // // デフォルトでは、log.LstdFlags が設定されている. // なのでそのまま、log.Println() とかを呼ぶと // 日付 時刻 メッセージ // という出力になる. // // この状態から、日付と時刻の出力を消したい場合は、log.LstdFlags を除去すれば良い. // フラグ定数は、$GOROOT/src/log/log.go の中に記載されている. // // REFERENCES:: // https://golang.org/pkg/log/#pkg-constants // https://golang.org/pkg/log/#Flags // https://golang.org/pkg/log/#SetFlags // https://stackoverflow.com/questions/48629988/remove-timestamp-prefix-from-go-logger // ---------------------------------------------------------------- // デフォルトの状態でログ出力 log.Println("デフォルト状態でログ出力") // 現在 log.LstdFlags が設定されているかを確認 log.Printf("log.LstdFlags [%t]", log.Flags()&log.LstdFlags == log.LstdFlags) // log.LstdFlags を 除去 log.SetFlags(log.Flags() &^ log.LstdFlags) // 日付と時刻が出力されないかを確認 log.Println("日付と時刻が消える") // 新たな フラグ として、ファイル名を表示するように設定 log.SetFlags(log.Flags() | log.Lshortfile) // ファイル名が出力されるかを確認 log.Println("ファイル名が付与される") log.Printf("log.Lshortfile [%v]", log.Flags()&log.Lshortfile == log.Lshortfile) // 一気に全設定フラグを落とす場合は以下のようにする log.SetFlags(0) // ただの文字列だけが出力されることを確認 log.Println("全設定フラグをオフ") // 元に戻す log.SetFlags(log.Flags() | log.LstdFlags) // 元の状態に戻ったことを確認 log.Println("元の状態に戻る") return nil }
try-golang/log_flags.go at master · devlights/try-golang · GitHub
実行すると以下な感じ。
[Name] "log_flags" 2020/01/09 18:30:47 デフォルト状態でログ出力 2020/01/09 18:30:47 log.LstdFlags [true] 日付と時刻が消える log_flags.go:43: ファイル名が付与される log_flags.go:44: log.Lshortfile [true] 全設定フラグをオフ 2020/01/09 18:30:47 元の状態に戻る
参考情報
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場