2016-08-15 5 views
0

私はIrisを使ってGoアプリケーションをテストしています。 すべてのエラーまたは例外をRollbarアカウントに記録します。アイリス - エラー/例外を記録する方法は?

たとえば、エンドポイントが応答に時間がかかりすぎてタイムアウトが発生した場合は、ログに記録します。どうやってそのようなエラーを捕まえることができますか?

更新

私は、マニュアルでOnError方法を発見した、と私はこのようにそれを使用すると考えていた:

iris.OnError(iris.StatusServiceUnavailable, func(c *iris.Context) { 
    c.Write("503") 
    params := string(c.RequestCtx.Request.Body()) 
    rollbar.Error("error", errors.New("503 Service Unavailable"), &rollbar.Field{Name: "request_body", Data: params}) 
}) 

しかし、それはロールバーにエラーをログに記録されていません。

答えて

1

あなた自身で書く必要がありますiris middlewareあなたは、通常と同じように

iris.UseFunc(irisMiddlewareFunc) 

そして、あなただけの(回復使用し、同様にパニックを処理する必要がある場合):あなたはこのようにそれを使用

func irisMiddlewareFunc(ctx *iris.Context) { 
    startedAt := time.Now() 
    ctx.Next() 
    timeTaken := time.Since(startedAt) 

    // now check time taken and log as required 
    if timeTaken.Seconds() > 2 { 
     fmt.Println("Taken too long") 
    } 
} 

ザ・:

は次のようになります。パニックを処理する例については、github.com/iris-contrib/middleware/recovery を参照してください。

+0

これは面白そうです。しかし、この関数の最後の呼び出しである 'Next()'は使用しないでください。 – Guilherme

+1

簡単な言葉では、Next()は処理のチェーン内の次のハンドラを呼び出します(最後はリクエストのハンドラになります)。彼らは連鎖と呼ばれましたが、私はむしろ連鎖よりもむしろロシアの人形のように考えることを提案したいと思います。 Next()コールをファームウェアの最後に移動すると、ハンドラが呼び出される前にすべての測定とロギングが行われます。 – Seva

+0

もう1つの例は、github.com/iris-contrib/middleware/loggerです。 Serve()メソッドを見てください。 – Seva

関連する問題