LoginSignup
6
6

More than 5 years have passed since last update.

Logrusで標準出力とファイルの両方にログ出力する方法

Posted at

Goでロギングライブラリを探してみて、
https://github.com/sirupsen/logrus
が使いやすそうだったのですが、標準出力とファイル両方にログ出力しようとして困りました。

標準出力とファイルをio.MultiWriterでラップして、logrusのLoggerに渡せばいいと思い、試してみたところ、標準出力とファイルの両方に出力することはできましたが、以下のようにファイルにもコンソールカラー表示のためのエスケープシーケンスが入ってしまいます。

[34mINFO[0m[0000] [ログメッセージ]

Loggerのフォーマッターを

logger.Formatter = &logrus.TextFormatter{DisableColors: true}

のようにすれば、エスケープシーケンスはなくなりますが、当然、標準出力もカラー表示されなくなります。
標準出力にはカラーで表示し、ファイルにはエスケープシーケンスなしに出力するには、Loggerを分けてそれぞれ出力する方法しかわかりませんでした。とはいえ、ログ出力時に毎回、それぞれのLoggerのメソッドを呼ぶのは面倒すぎますので、複数のLoggerをラップするLoggerを作ってみました。
https://github.com/learnin/go-multilog

コンストラクタで複数のLoggerを渡して、各ログ出力メソッド実行時に各Loggerの出力メソッドを呼んでいるだけです。
とりあえず、これでやりたいことはできましたが、もっといいやり方があれば知りたいです。

なお、そもそもlogrusではなく、https://github.com/golang/gloghttps://github.com/cihub/seeloghttps://github.com/alecthomas/log4go 等を使えばこのような問題はなかったのかもしれませんが、設定の方法がコマンドラインオプションだったりXMLファイルだったりする点が好みではなく試していません。

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6