mirror of
https://github.com/xaionaro-go/streamctl.git
synced 2025-10-26 00:50:28 +08:00
51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"os"
|
|
|
|
"github.com/facebookincubator/go-belt/tool/experimental/errmon"
|
|
errmonsentry "github.com/facebookincubator/go-belt/tool/experimental/errmon/implementation/sentry"
|
|
"github.com/facebookincubator/go-belt/tool/logger"
|
|
"github.com/facebookincubator/go-belt/tool/logger/implementation/logrus"
|
|
"github.com/getsentry/sentry-go"
|
|
"github.com/xaionaro-go/streamctl/pkg/observability"
|
|
)
|
|
|
|
func getContext(flags Flags) context.Context {
|
|
ctx := context.Background()
|
|
|
|
ll := logrus.DefaultLogrusLogger()
|
|
l := logrus.New(ll).WithLevel(flags.LoggerLevel)
|
|
|
|
if flags.LogFile != "" {
|
|
f, err := os.OpenFile(flags.LogFile, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0750)
|
|
if err != nil {
|
|
l.Errorf("failed to open log file '%s': %v", flags.LogFile, err)
|
|
}
|
|
ll.SetOutput(f)
|
|
}
|
|
|
|
if flags.SentryDSN != "" {
|
|
l.Infof("setting up Sentry at DSN '%s'", flags.SentryDSN)
|
|
sentryClient, err := sentry.NewClient(sentry.ClientOptions{
|
|
Dsn: flags.SentryDSN,
|
|
})
|
|
if err != nil {
|
|
l.Fatal(err)
|
|
}
|
|
sentryErrorMonitor := errmonsentry.New(sentryClient)
|
|
ctx = errmon.CtxWithErrorMonitor(ctx, sentryErrorMonitor)
|
|
l = l.WithPreHooks(observability.NewErrorMonitorLoggerHook(
|
|
sentryErrorMonitor,
|
|
))
|
|
}
|
|
|
|
ctx = logger.CtxWithLogger(ctx, l)
|
|
logger.Default = func() logger.Logger {
|
|
return l
|
|
}
|
|
|
|
return ctx
|
|
}
|