遵循 SwiftLog,将来自 Swift 的日志消息发送到 Sentry。
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"])
]
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))
)
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