41
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Go】log.Fatalは気軽に使わない

Posted at

Goのエラーハンドリングでよく見る形のこんなコードを書いていました

if err != nil {
    log.Fatal(err)
    return err
}

コレで試してみるとエラーのときに強制的にプログラム終了。。。

何が起こっていたか

log.Fatal の挙動を調べてみたらすぐに分かりました。

// Fatal is equivalent to Print() followed by a call to os.Exit(1).
func Fatal(v ...interface{}) {
    std.Output(2, fmt.Sprint(v...))
    os.Exit(1)
}

os.Exit(1) でプログラムが終了してしまうみたい。。。

ついでにログレベルを調べてみた

ログレベル 説明
emergency システムが使用不可能な状態
fatal 致命的なエラー プログラムの異常終了を伴うようなもの
alert すぐに何らかの対処が必要 アプリケーションがダウン。Slackなどで通知するべき
critical 危機的な状態 予期しない例外
error 直ちに対処する必要のない実行時エラー
warning エラーではないが例外的なもの 間違っていないが望ましくないものの使用
notice 正常だが、重要なもの
info 関心を寄せておきたいもの ユーザーのログインやSQL
debug 開発中のデバッグ情報
trace トレース情報。詳細な情報。

この表はなんとなくイメージを掴むためのものなのでいろんなロギングツールを混ぜたものなので注意

言語ごとにログのライブラリがあるのでそれに準ずるのが良さそう。

参考

ちなみに

Goの標準パッケージであり log で定義されてるログを出力する関数は

  • Print
  • Fatal
  • Panic
    の3つしかない

外部パッケージや自作して適切なログレベルを定義していくのが良さそう。

参考

41
20
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
41
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?