main() 中的事件使用 bugsnaggin 的 AutoNotify() 执行两次

Events in main() are executed twice with bugsnaggin's AutoNotify()

提问人:Amandeep kaur 提问时间:10/25/2023 最后编辑:Amandeep kaur 更新时间:10/31/2023 访问量:50

问:

我集成了用于报告运行时崩溃的 bugsnag。集成是作为 pr 文档完成的。我有一个init(),在main()之前调用。init() 中有一些事件我需要在 main 之前执行。问题是用 init() 编写的事件使用 AutoNotify() 执行了两次。

环境

  • Bugsnag Go 版本:v2
  • Bugsnag Go Gin 版本:v1.0.0
  • Go 版本:go1.19.5 linux/amd6
  • Gin 框架版本:v1.8.1

示例代码片段

package main

import (
    "fmt"

    bugsnaggin "github.com/bugsnag/bugsnag-go-gin"
    "github.com/bugsnag/bugsnag-go/v2"
    "github.com/gin-gonic/gin"
)

func init() {
    fmt.Println("I am at init()")
}
func main() {
    router := gin.Default()
    router.Use(gin.Recovery())
    router.Use(BugsnagAutoNotify())
}

func BugsnagAutoNotify() gin.HandlerFunc {
    return bugsnaggin.AutoNotify(bugsnag.Configuration{
        APIKey:          config.BugsnagApiKey,
        ProjectPackages: []string{"main"},
        AppVersion:      config.BugsnagAppVersion,
    })
}

更新:

即使完全删除 init() 并在 main() 中移动该功能,事件也会执行两次。现在我不确定 Bugsnag 发生了什么。

Go-Gin Bugsnag

评论

4赞 JimB 10/25/2023
init永远不能多次运行,因为不是可以直接调用的已定义符号。如果多次看到输出,那是因为您的进程被多次执行。init
0赞 Amandeep kaur 10/26/2023
@JimB,这就是我的观点,当调用 bugsnag 时,该进程将运行两次。没有 Bugsnag,它工作正常。
0赞 JimB 10/26/2023
那么,如果你了解问题是什么,问题是什么?某些东西可以监视所有可能的恐慌的唯一方法是将程序作为子进程运行。
0赞 Amandeep kaur 10/27/2023
问题在于它不应该运行两次,因为事件应该执行一次。我该如何解决这个问题?
0赞 JimB 10/31/2023
init用于初始化当前进程的包;有外部副作用的东西不应该从中调用。否则,你将不得不弄清楚 Bugsnag 如何调用子进程,并使用相同的机制跳过任何你想跳过的初始化。init

答: 暂无答案