Bugsnag 🐛

Swift Version Vapor Version Circle CI codebeat badge codecov Readme Score GitHub license

Bugsnag 报告错误。

📦 安装

在你的项目中集成 Bugsnag

更新你的 Package.swift 文件。

.package(url: "https://github.com/nodes-vapor/bugsnag.git", from: "4.0.0")

更新 configure.swift

public func configure(_ app: Application) throws {
    // Configure Bugsnag.
    app.bugsnag.configuration = .init(
        apiKey: "<YOUR BUGSNAG API KEY>",
        releaseStage: app.environment.name,
        shouldReport: app.environment.name != "local"
    )

    // Add Bugsnag middleware.
    app.middleware.use(BugsnagMiddleware())
}

报告

BugsnagMiddleware 将自动报告你的路由处理程序抛出的错误。你可以从 ApplicationRequest 手动报告错误。

// Reporting from Application.
app.bugsnag.report(Abort(.internalServerError))

// Reporting from Request.
app.get("test") { req in
    req.bugsnag.report(Abort(.upgradeRequired))
    return HTTPStatus.ok
}

通过遵循 BugsnagError 协议,你可以完全控制错误的报告方式。它具有以下属性

名称 类型 函数 默认值
shouldReport Bool 通过返回 false 选择不报告错误 true
severity Severity 指示错误严重程度 (.info|.warning|.error) .error
metadata [String: CustomDebugStringConvertible] 包含在报告中的附加元数据 [:]

用户

将你的 Authenticatable 模型遵循 BugsnagUser 可以让你轻松地将数据与报告关联起来。

extension TestUser: BugsnagUser {
    var bugsnagID: CustomStringConvertible? { 
        self.id
    }
}

配置所有你希望 Bugsnag 报告的用户模型。

// Add to configure.swift.
app.bugsnag.users.add(TestUser.self)

Bugsnag 将自动检查 Vapor 的认证 API 以获取配置的用户类型,并在用户登录时报告用户的标识符。

痕迹

痕迹使你能够将自定义事件附加到你的报告中。使用 Request 上的便捷函数留下痕迹。

req.bugsnag.breadcrumb(
    name: "Something happened!",
    type: .manual,
    metadata: ["foo": "bar"]
)

痕迹类型由 Bugsnag 提供

enum BugsnagBreadcrumbType {
    case error
    case log
    case manual
    case navigation
    case process
    case request
    case state
    case user
}

键过滤器

通常,你会在 Bugsnag 的报告中收到诸如标头、查询参数或 post body 字段等信息。为了确保你不会跟踪敏感信息,你可以使用应过滤掉的字段列表来配置 Bugsnag

app.bugsnag.configuration = .init(
    apiKey: "foo",
    releaseStage: "debug",
    keyFilters: ["email", "password"]
)

在这种情况下,Bugsnag 报告将隐藏键/名称为 emailpassword 的标头字段、查询参数或 post body json 字段。

⚠️注意:如果定义了键过滤器,并且 Bugsnag 不知道如何解析请求体,则整个请求体将被隐藏。

🏆 鸣谢

此软件包由 Nodes 的 Vapor 团队开发和维护。

📄 许可证

此软件包是在 MIT 许可证 下开源的软件。