Skip to content

Latest commit

 

History

History
53 lines (40 loc) · 1.71 KB

README.md

File metadata and controls

53 lines (40 loc) · 1.71 KB

panicwatch

CI Go Reference

Simple utility for catching panics in your Go applications.

When you start panicwatch, it creates a new process which watches your application. When the application exits, panicwatch parses the stderr output of your application and if it finds a panic, it will report it using configured callback. Panicwatch doesn't block usage of stderr of your application in any way as it uses dup to get a copy of it.

Panicwatch isn't meant for recovery from panics, but merely for safe and reliable logging when they happen.

Panicwatch won't stand in your way: it won't prevent you from any signal handling/manipulation, other file descriptor magic on your side, or anything that you can think of. It is completely transparent to your application.

Try using it via grongor/go-bootstrap: a library that handles all the annoying bootstrapping for you (config, signals, logging, application context, ...).

package main

import (
	"log"

	"github.com/getsentry/sentry-go"
	"github.com/grongor/panicwatch"
)

func main() {
	if err := sentry.Init(); err != nil {
		log.Fatalln("sentry.Init: " + err.Error())
	}

	app := &yourApp{}

	err := panicwatch.Start(panicwatch.Config{
		OnPanic: func(p panicwatch.Panic) {
			sentry.Log("panic: "+p.Message, "stack", p.Stack)
		},
		OnWatcherDied: func(err error) {
			log.Println("panicwatch watcher process died")
			app.ShutdownGracefully()
		},
	})
	if err != nil {
		log.Fatalln("failed to start panicwatch: " + err.Error())
	}

	app.Start()
}