https://docs.sentry.io/platforms/go/ zap初期化時に、Hookを登録することができる。 zapcore.Entryを引数に取るので、そこからメッセージやログレベルを取得してやればよい import ( "fmt" "strings" "time" "github.com/aws/aws-lambda-go/events" "github.com/getsentry/sentry-go" "go.uber.org/zap" "go.uber.org/zap/zapcore" ) func NewLogger(levelStr string) (*zap.Logger, error) { level := parseLogLevel(levelStr) config := zap.Config{ Level: zap.NewAtomicLevelAt(level), } // 環境変数SENTRY_DSNを設定するか、ClientOptionsに設定する err := sentry.Init(sentry.ClientOptions{}) if err != nil { fmt.Printf("sentry.Init: %s", err) } return config.Build(zap.Hooks(func(entry zapcore.Entry) error { if entry.Level == zapcore.ErrorLevel { defer sentry.Flush(2 * time.Second) ev := sentry.NewEvent() ev.Level = sentry.LevelError ev.Message = entry.Message sentry.CaptureEvent(ev) } return nil })) } func parseLogLevel(levelStr string) zapcore.Level { switch strings.ToUpper(levelStr) { case zapcore.DebugLevel.CapitalString(): return zapcore.DebugLevel case zapcore.InfoLevel.CapitalString(): return zapcore.InfoLevel case zapcore.WarnLevel.CapitalString(): return zapcore.WarnLevel case zapcore.ErrorLevel.CapitalString(): return zapcore.ErrorLevel default: return zapcore.InfoLevel } } logging - How to use Sentry with go.uber.org/zap/zapcore logger - Stack Overflow [Go]Sentryに対応したcustom errorの作り方