kaspad/util/panics/panics.go
Ori Newman 6bb53eaae3 [NOD-256] add error log (#369)
* [NOD-256] Add error log

* [NOD-256] Add error log

* [NOD-256] Fix typo and comment

* [NOD-256] Remove btclog dir

* [NOD-256] Format project

* [NOD-256] Add error log files

* [NOD-256] Add an option to add a log file to write into to an existing backend logger

* [NOD-256] Get rid of redundant logs initialization

* [NOD-256] rename initLogRotators to initLog

* [NOD-256] Get rid ExampleSignTxOutput and convert ExampleBlockDAG_ProcessBlock to a regular test

* [NOD-256] Show error message if os.Exiting from initLog
2019-08-21 11:26:21 +03:00

30 lines
697 B
Go

package panics
import (
"github.com/daglabs/btcd/logs"
"os"
"runtime/debug"
)
// HandlePanic recovers panics, log them, and then exits the process.
func HandlePanic(log logs.Logger, backendLog *logs.Backend) {
if err := recover(); err != nil {
log.Criticalf("Fatal error: %s", err)
log.Criticalf("Stack trace: %s", debug.Stack())
if backendLog != nil {
backendLog.Close()
}
os.Exit(1)
}
}
// GoroutineWrapperFunc returns a goroutine wrapper function that handles panics and write them to the log.
func GoroutineWrapperFunc(log logs.Logger, backendLog *logs.Backend) func(func()) {
return func(f func()) {
go func() {
defer HandlePanic(log, backendLog)
f()
}()
}
}