2016-08-15 1 views
0

Ich teste eine Go-Anwendung mit Iris. Ich möchte jeden Fehler oder eine Ausnahme in meinem Rollbar-Konto protokollieren.Iris - Wie protokolliert man Fehler/Ausnahmen?

Zum Beispiel, wenn der Endpunkt zu lange dauert, um zu antworten und es ein Timeout gibt, möchte ich es protokollieren. Wie kann ich solche Fehler erfassen?

aktualisieren

ich in der Dokumentation die OnError Methode, und ich dachte, dass ich es so verwenden könnte:

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}) 
}) 

Aber es ist, den Fehler zu Rollbar nicht anzumelden.

Antwort

1

Sie müssen Ihre eigene iris middleware schreiben.

sollte wie folgt aussehen:

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") 
    } 
} 

Die Sie es wie folgt verwendet werden:

iris.UseFunc(irisMiddlewareFunc) 

Und wenn Sie gerät in Panik und müssen behandeln, verwenden Sie einfach zu erholen(), wie Sie es in der Regel tun, um Paniken zu behandeln. Ein Beispiel finden Sie in github.com/iris-contrib/middleware/recovery .

+0

Das sieht interessant aus. Aber sollte nicht 'Next()' der letzte Aufruf in dieser Funktion sein? – Guilherme

+1

Nein. In einfachen Worten ruft Next() den nächsten Handler in der Verarbeitungskette auf (der letzte ist der Handler der Anfrage). Sie nannten Kettenverkettungen, aber ich würde eher vorschlagen, über sie nachzudenken, eher wie eine russische Puppe als eine Kette. Wenn Sie den Next() - Aufruf an das Ende der Firmware verschieben, werden alle Messungen und Protokollierungen ausgeführt, bevor Sie den Handler aufrufen. – Seva

+0

Ein anderes Beispiel wäre github.com/iris-contrib/middleware/logger. Schau dir die Serve() Methode an. – Seva

Verwandte Themen