1. ホーム
  2. logging

[解決済み] なぜfmt.Printlnではなくlog.Printlnを使用しなければならないのですか?

2023-03-17 20:41:17

質問

から log.go (logパッケージの実装) :

167 // Println calls l.Output to print to the logger.
168 // Arguments are handled in the manner of fmt.Println.
169 func (l *Logger) Println(v ...interface{}) { l.Output(2, fmt.Sprintln(v...)) }

log.Println は単なる関数ラッパーで fmt.Sprintln の関数ラッパーに過ぎず、なぜそれを fmt.Println または fmt.Sprintln ?

実用的な理由は何ですか?

どのように解決するのですか?

2つの事柄が異なっています。

  1. パッケージログ経由の印刷は、同時実行のゴルーチンから安全です(一方、プレーンな fmt ではありません)

  2. ログはタイミング情報を自動的に追加することができます。

つまり、これらは全く別のものです。logはログを取るためのものであり fmt は書式設定用です。(なるほど、logは同じ動詞とフラグを使いますが、それは便利なだけです)。