implement DefaultRecoverHandler
This commit is contained in:
parent
88057bed20
commit
d8423fc605
12
client.go
12
client.go
@ -112,7 +112,10 @@ type Config struct {
|
|||||||
// not set, the client will panic. identifier is generally going to be the
|
// not set, the client will panic. identifier is generally going to be the
|
||||||
// callback ID. The file and line should point to the exact item that
|
// callback ID. The file and line should point to the exact item that
|
||||||
// threw a panic, and stack is the full stack trace of how RecoverFunc
|
// threw a panic, and stack is the full stack trace of how RecoverFunc
|
||||||
// caught it.
|
// caught it. Set this to DefaultRecoverHandler if you don't want the
|
||||||
|
// client to panic, however you don't want to handle the panic yourself.
|
||||||
|
// DefaultRecoverHandler will log the panic to Debugger or os.Stdout if
|
||||||
|
// Debugger is unset.
|
||||||
RecoverFunc func(c *Client, e *HandlerError)
|
RecoverFunc func(c *Client, e *HandlerError)
|
||||||
// SupportedCaps are the IRCv3 capabilities you would like the client to
|
// SupportedCaps are the IRCv3 capabilities you would like the client to
|
||||||
// support. Only use this if DisableTracking and DisableCapTracking are
|
// support. Only use this if DisableTracking and DisableCapTracking are
|
||||||
@ -173,10 +176,11 @@ func New(config Config) *Client {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if c.Config.Debugger == nil {
|
if c.Config.Debugger == nil {
|
||||||
c.Config.Debugger = ioutil.Discard
|
c.debug = log.New(ioutil.Discard, "", 0)
|
||||||
|
} else {
|
||||||
|
c.debug = log.New(c.Config.Debugger, "debug:", log.Ltime|log.Lshortfile)
|
||||||
|
c.debug.Print("initializing debugging")
|
||||||
}
|
}
|
||||||
c.debug = log.New(c.Config.Debugger, "debug:", log.Ltime|log.Lshortfile)
|
|
||||||
c.debug.Print("initializing debugging")
|
|
||||||
|
|
||||||
// Setup the caller.
|
// Setup the caller.
|
||||||
c.Handlers = newCaller(c.debug)
|
c.Handlers = newCaller(c.debug)
|
||||||
|
17
handler.go
17
handler.go
@ -366,8 +366,6 @@ func recoverHandlerPanic(client *Client, event *Event, id string, skip int) {
|
|||||||
callOk: ok,
|
callOk: ok,
|
||||||
}
|
}
|
||||||
|
|
||||||
client.debug.Println(err.Error())
|
|
||||||
client.debug.Println(err.String())
|
|
||||||
client.Config.RecoverFunc(client, err)
|
client.Config.RecoverFunc(client, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -401,3 +399,18 @@ func (e *HandlerError) Error() string {
|
|||||||
func (e *HandlerError) String() string {
|
func (e *HandlerError) String() string {
|
||||||
return fmt.Sprintf("panic: %s\n\n%s", e.Panic, string(e.Stack))
|
return fmt.Sprintf("panic: %s\n\n%s", e.Panic, string(e.Stack))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DefaultRecoverHandler can be used with Config.RecoverFunc as a default
|
||||||
|
// catch-all for panics. This will log the error, and the call trace to
|
||||||
|
// the debug log (see Config.Debugger), or os.Stdout if Config.Debugger is
|
||||||
|
// unset.
|
||||||
|
func DefaultRecoverHandler(client *Client, err *HandlerError) {
|
||||||
|
if client.Config.Debugger == nil {
|
||||||
|
fmt.Println(err.Error())
|
||||||
|
fmt.Println(err.String())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
client.debug.Println(err.Error())
|
||||||
|
client.debug.Println(err.String())
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user