Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
13a7d8db91 | |||
bdad721b3d | |||
f164e9699d |
2
go.mod
2
go.mod
@@ -1,3 +1,3 @@
|
|||||||
module cylogger
|
module git.site.quack-lab.dev/dave/cylogger
|
||||||
|
|
||||||
go 1.24.2
|
go 1.24.2
|
||||||
|
2
main.go
2
main.go
@@ -1,4 +1,4 @@
|
|||||||
package logger
|
package cylogger
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
49
safe.go
Normal file
49
safe.go
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
package cylogger
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"runtime/debug"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PanicHandler handles a panic and logs it
|
||||||
|
func PanicHandler() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
goroutineID := GetGoroutineID()
|
||||||
|
stackTrace := debug.Stack()
|
||||||
|
Error("PANIC in goroutine %s: %v\n%s", goroutineID, r, stackTrace)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// SafeGo launches a goroutine with panic recovery
|
||||||
|
// Usage: logger.SafeGo(func() { ... your code ... })
|
||||||
|
func SafeGo(f func()) {
|
||||||
|
go func() {
|
||||||
|
defer PanicHandler()
|
||||||
|
f()
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SafeGoWithArgs launches a goroutine with panic recovery and passes arguments
|
||||||
|
// Usage: logger.SafeGoWithArgs(func(arg1, arg2 interface{}) { ... }, "value1", 42)
|
||||||
|
func SafeGoWithArgs(f func(...interface{}), args ...interface{}) {
|
||||||
|
go func() {
|
||||||
|
defer PanicHandler()
|
||||||
|
f(args...)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
// SafeExec executes a function with panic recovery
|
||||||
|
// Useful for code that should not panic
|
||||||
|
func SafeExec(f func()) (err error) {
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
goroutineID := GetGoroutineID()
|
||||||
|
stackTrace := debug.Stack()
|
||||||
|
Error("PANIC in goroutine %s: %v\n%s", goroutineID, r, stackTrace)
|
||||||
|
err = fmt.Errorf("panic recovered: %v", r)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
f()
|
||||||
|
return nil
|
||||||
|
}
|
Reference in New Issue
Block a user