基于 MetricKit 的轻量级诊断报告。
MeterReporter 将捕获 MetricKit 有效载荷并将其转发到后端。它使用 Meter 来处理和符号化有效载荷。生成的数据非常接近 MetricKit JSON 结构。但是,它确实添加了一些字段来支持其他功能。
dependencies: [
.package(url: "https://github.com/ChimeHQ/MeterReporter")
]
let url = URL(string: "https://my.backend.com/reports")!
var config = MeterReporter.Configuration(endpointURL: url)
config.hostIdentifier = Bundle.main.bundleIdentifier
let reporter = MeterReporter(configuration: config)
reporter.start()
默认情况下,MeterReporter 使用 URLSession
后台上传,以获得可靠性和性能。但是,有时操作系统实际上需要花费数小时才能执行这些操作。 如果您只是在测试东西,这可能会很痛苦。为了更容易,您可以使用 MeterReporter.Configuration
的另一个属性禁用后台上传。
MeterReporter 可以在 macOS 上捕获未捕获的 NSException。 不幸的是,AppKit 会干扰运行时异常的流程。 如果您想获得有关未捕获异常的此信息,则需要进行一些额外的工作。
您的应用程序的顶级 NSApplication
实例必须是 ExceptionLoggingApplication
的子类。
import MeterReporter
class Application: ExceptionLoggingApplication {
}
并且,您必须更新您的 Info.plist 以确保 NSPrincipalClass
键使用 <App Module Name>.Application
引用此类。
我知道这很痛苦。如果您觉得有动力,请向 Apple 提交反馈,要求他们使 AppKit 在这方面表现得像 UIKit 一样。
我还强烈建议将 NSApplicationCrashOnExceptions
默认键设置为 true。 默认设置将允许您的应用程序在异常后继续执行,几乎可以保证状态损坏和不正确的行为。
向端点发出的请求将是 HTTP PUT
。 该请求还将设置一些标头。
Content-Type
将是 application/vnd.chimehq-mxdiagnostic
MeterReporter-Report-Id
将是一个唯一标识符MeterReporter-Platform
configuration.hostIdentifier
不为 nil,则为 MeterReporter-Host-Id
数据本身是 Meter 的 DiagnosticPayload.jsonRepresentation()
的结果。
我很乐意收到您的来信! 问题或拉取请求效果很好。 Matrix space 也可用于实时帮助,但是我强烈倾向于以文档形式回答。
我喜欢协作,如果您有类似的项目,我很乐意找到合作方式。
我更喜欢使用制表符进行缩进,以提高可访问性。 但是,我宁愿您使用想要的系统并进行 PR,而不要因为空格而犹豫。
通过参与此项目,您同意遵守贡献者行为准则。