LoginSignup
0
0

More than 3 years have passed since last update.

Goでエラーだったときにlogrusでログ出力してみる

Last updated at Posted at 2020-07-11

はじめに

GoでOpenWeatherMapAPI叩いてみたでやったものをちょっとだけ改良して、エラー時のログ処理を追加してみたものになります。

GitHubはこちら

環境

OS:maOS Catalina 10.15.5
Go:go version go1.14.4 darwin/amd64

手順

  • logrusをインストールする

※ログレベルを分けたい&速度を気にする必要がない&シンプルに使えそうだったのでlogrusを選択

$ go get github.com/sirupsen/logrus
  • init関数でログ設定を行う
 func init() {
    // Info以上のレベルを出力する設定
    log.SetLevel(log.InfoLevel)
 }
  • エラーだった場合にログを出力する

    • APIを叩いたとき
    res, resErr := http.Get(url)
    if resErr != nil {
        log.Fatalf("Failed to Get API: %v", resErr)
    }
    
    • レスポンスを取得したとき
    // レスポンスを取得
    defer res.Body.Close()
    body, redErr := ioutil.ReadAll(res.Body)
    
    // レスポンスを読み込めなかった場合はログを出力
    if redErr != nil {
        log.Warnf("Failed to read response: %v", redErr)
    }
    
    • JSONをパースしたとき
    // 返却されたJSONをパース
    if paErr := json.Unmarshal(body, &data); paErr != nil {
        log.Warnf("Failed to parse JSON: %v", paErr)
    }
    

課題

  • ちゃんとテスト書くとどうやってやるんだろう・・・?
  • 全部mainに書いちゃってるので、リファクタリングが必要
  • API叩いたときにエラーだったらリトライ処理あってもよい
  • Goの例外処理の思想がJavaとだいぶ異なるのでそのあたり整理しておさえたい

参考にさせていただいたもの

0
0
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
0
0