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/glog や https://github.com/cihub/seelog や https://github.com/alecthomas/log4go 等を使えばこのような問題はなかったのかもしれませんが、設定の方法がコマンドラインオプションだったりXMLファイルだったりする点が好みではなく試していません。