SwiftSentry

遵循 SwiftLog,将来自 Swift 的日志消息发送到 Sentry。

用法

  1. SwiftSentry 作为依赖项添加到您的 Package.swift
  dependencies: [
    .package(name: "SwiftSentry", url: "https://github.com/petrpavlik/swift-sentry.git", from: "1.0.0")
  ],
  targets: [
    .target(name: "MyApp", dependencies: ["SwiftSentry"])
  ]
  1. 配置日志系统
import Logging
import SwiftSentry

let sentry = Sentry(dsn: "<Your Sentry DSN String>")

// Add sentry to logger and set the minimum log level to `.error`
LoggingSystem.bootstrap { label in
    MultiplexLogHandler([
        SentryLogHandler(label: label, sentry: sentry, level: .error),
        StreamLogHandler.standardOutput(label: label)
    ])
}

如果您的应用程序已经使用 EventLoopGroup,建议与 SwiftSentry 共享它

let sentry = try Sentry(
  dsn: "<Your Sentry DSN String>",
  httpClient: HTTPClient(eventLoopGroupProvider: .shared(eventLoopGroup))
)
  1. 发送日志
var logger = Logger(label: "com.example.MyApp.main")
logger.critical("Something went wrong!")

记录器的元数据将作为标签发送到 Sentry。

logger[metadataKey: "note"] = Logger.MetadataValue(stringLiteral: "some usefull information")

上传崩溃报告

SwiftSentry 还可以使用 Swift Backtrace 上传在 Linux 上生成的堆栈跟踪。

以下配置假设您运行一个基于 Swift 的 "API 服务",使用 supervisord,遵循典型的 vapor 部署

堆栈跟踪在您的 "API 服务" 每次启动时上传。如果您的应用程序崩溃,堆栈跟踪将被打印在 stderr 上,并写入 supervisord 中指定的日志文件。 一旦您的应用程序重新启动,SwiftSentry 将读取此日志文件并将其上传到 Sentry。

import SwiftSentry

let sentry = Sentry(dsn: "<Your Sentry DSN String>")

// Upload stack trace from a log file
// WARNING: the error file will be truncated afterwards
_ = try? sentry.uploadStackTrace(path: "/var/log/supervisor/hello-stderr.log")

Supervisor 配置位于 /etc/supervisor/conf.d/hello.conf

[program:hello]
command=/home/vapor/hello/.build/release/Run serve --env production
directory=/home/vapor/hello/
user=vapor
stdout_logfile=/var/log/supervisor/%(program_name)-stdout.log
stderr_logfile=/var/log/supervisor/%(program_name)-stderr.log