Go Tips連載の第8弾です。
Go tipsということで、シンプルネタを投稿します。
検索窓に入れると「printデバッグでいつまで消耗しているの?」とか「printデバッグにさようなら」とかサジェストされつつも、根強く生き残っているのがprintデバッグです。むしろ、非同期だったり並列処理だったりプロセスまたぎ、ホストまたぎが増えてくると、同期的に動くデバッガーが逆に使いにくかったりもありますし、デバッガーを使うにしてもブレークポイントを仕掛ける場所のあたりをつけるためにprintデバッグの力を借りたりもあるし、いっそのことprintデバッグの方が進化しろ、と個人的には思っています。分散トレーシングは進化したprintデバッグだと思っています。
Goでprintデバッグの友といえば標準ライブラリのlogパッケージですね。logパッケージには色々カスタマイズポイントがありますのでそれを紹介します。
ログ出力している場所を表示
printデバッグをするには、どこから出力された文字列かが分からないと意味がありません。Goの標準のログ出力だと、日付と時間の情報が付与されるだけです。ここはフラグで変更できます。フラグはこんな感じで定義されています。
Ldate = 1 << iota // the date in the local time zone: 2009/01/23 |
Lmicroseconds
のマイクロ秒単位の時間情報があれば、パフォーマンスが遅い、計測が必要な場所のあたりをつけるのに便利そうですね。ファイル名を付与するには、log.Lshortfile
かlog.Llongfile
を付与します。
package main |
フォルダはデフォルトではフルパス表示されますが、いまどきは-tirmpath
つけてビルドするでしょうし、そうなるとパッケージ名+相対パスだけになります。
出力先とかログに決まった文字列を追加
他にも出力先とかも変更できます。
package main |
今回は出力先が変わったことがすぐわかるようにちょっとio.Writerを作っていますが、実際はio.MultiWriterを使って、ネットワークとかファイルにクロスポストするぐらいですかね。
type OrigWriter struct { |
まとめ
ファイル名の出力を入れると便利です。また、絵文字を今回サンプルに使いましたが、絵文字って色がつくので(たとえgo playgroundであっても)視認性がいいんですよね。絵文字をlog.SetPrefix()
に入れてあげるのもおすすめです。絵文字を使う場合はグリフが半角相当の幅か全角相当の幅かはターミナルの設定によって出力のされ方が変わることがあり、半角の幅だと絵に次の文字がめり込んでよみにくくなるため、絵文字の後ろには半角スペースを入れておくのをおすすめします。