Как создать кастомное рекавери в Beego?

Как переопределить recoveryPanic от Beego? Я установил флаг recoverpanic = false и написал свое собственное восстановление, но мне не повезло, оно просто печатает сообщение о панике на консоли вместо перехода к моей функции восстановления.

func main() {
    defer recoverPanic()
    beego.Run()
}

func recoverPanic() {
    if err := recover(); err != nil {
        fmt.Println("Panic should go there")
    }
}

Я хочу поймать все непредвиденные ошибки, например nil pointer, написать журнал и отправить письмо нашим сопровождающим.


person windyzboy    schedule 22.06.2016    source источник


Ответы (1)


Вы должны добавить recoverPanic в начале каждой горутины. Вы добавляете recover в функцию main, и она не будет кэшировать panic запроса.

Попробуйте это в Beego:

func (c *MainController) Get() {
    defer recoverPanic()

    ... Your Code ...
}
person Bryce    schedule 04.08.2016