golang には logger が星の数ほどあるのですが
go言語におけるロギングについて — さにあらずコマンドラインオプションについて 分かり辛いので、僕の分かった事だけをメモしておきます。 ログの出力処理は glog.go#output を読めば大体分かります。 -logtostderr これを指定...
http://blog.satotaichi.info/logging-frameworks-for-go
その殆どがエスケープシーケンスを使って色を出しており、Windows で動かすと残念な表示になる物ばかりでした。
まさかログに色を付けたいという理由だけで ansiconを使うのは悲し過ぎるし、そもそも「ansicon 使ったら負けだと思ってる」ので、go-colorable というライブラリを書きました。
golang の logger はその殆どが標準パッケージの log を参考にしており、おおよそ SetOutput
という、出力先を変えられる関数が用意されています。そこで、それを横取りして Windows でも色を出せる様にしました。
mattn/go-colorable - GitHub
https://github.com/mattn/go-colorable
これを使うと今まで
こんな表示だったのが
この様にカラフルな表示になります。使い方はとても簡単で
package main
import (
"github.com/mattn/go-colorable"
"github.com/Sirupsen/logrus"
)
func main() {
logrus.SetOutput(colorable.NewColorableStdout())
logrus.Info("succeeded")
logrus.Warn("not correct")
logrus.Error("something error")
logrus.Fatal("panic")
}
この様に NewColorableStdout
を呼び出して io.Writer
を取得し、それを logger 等に渡すだけです。Windows 以外の場合は os.Stdout
を返す様になっているのでいちいち Windows かどうか判定する必要もありません。
UNIX で色を標準出力するライブラリ書いたけど、Windows... 知らねぇよ!って人は、ぜひこのライブラリを使ってみて下さい。きっと pull-request を貰うまでもなく、Windows 対応が完了している事になるはずです。