From Tokyo, Japan. Web-Developer. Write some codes by Go/Scala And thanks everything around my self.

goのlog系パッケージ標準エラー吐きがち説

goのロギングパッケージはstderrがお好き

早めに出社したらちょっとハマったので調べた

TL;DR

fmt.Println()はstdoutに吐くのにlog.Println()はstderrに吐くから気をつけようね。

世の中には2種類の標準出力しかいねえ()

標準出力(stdout) 標準エラー出力(stderr) あれ、log.Println()がerror出力に吐いてるぞ?と思った我々取材班はアマゾンに飛んだ

log.Printlnのソース

func Println(v ...interface{}) {
 std.Output(2, fmt.Sprintln(v...))
}

stdってなんやねん・・・とソースを上にスクロールするといた

var std = New(os.Stderr, "", LstdFlags) お前標準エラー出力やないか!!!!

Overviewにも書いてあるからぐうの音も出ない

Package log implements a simple logging package. It defines a type, Logger, with methods for formatting output. It also has a predefined 'standard' Logger accessible through helper functions Print[f|ln], Fatal[f|ln], and Panic[f|ln], which are easier to use than creating a Logger manually. That logger writes to standard error and prints the date and time of each logged message. Every log message is output on a separate line: if the message being printed does not end in a newline, the logger will add one. The Fatal functions call os.Exit(1) after writing the log message. The Panic functions call panic after writing the log message.

ちなみにfmtは

fmt.Printlnのソース

func Println(a ...interface{}) (n int, err error) {
 return Fprintln(os.Stdout, a...)
}

fmtちゃんはマジで真面目でいい子じゃん!あの子の悪口言うのやめろよ!!

ちなみにlogrusとzapもそのまま使うとstderrに吐くよ。

結論

gopherはログをエラー出力に吐かないと死ぬ呪いにかかってるので、ログ出力先を気にしないといけないときには覚えておいたほうがいい。

575判定API(雑)を作った

Suddenly IntelliSense on VisualStudioCode shows only PANIC When code with golang.