适用于 Apple 平台客户端应用程序的事件日志记录,支持离线工作并自动上传到 Google Cloud (GCP)。 该软件包依赖于 SwiftLog - 一个官方的 Swift 日志 API,因此可以轻松地集成到项目中并与其他日志后端结合使用。 日志事件以 JSON Lines 文件格式本地存储,并在时间间隔、指定事件或显式请求时批量上传到使用 Cloud Logging API v2 上传到 GCP。
是的,它会记录自身!(带有递归保护)🤘
Google 推荐的客户端应用程序日志记录解决方案是 Analytics 框架,它现在是 Firebase SDK 的一部分。 以下是他们的框架和此库在日志记录方面的比较:
| 库 | FirebaseAnalytics | GoogleCloudLogging |
|---|---|---|
| 平台 | 仅限移动设备。 甚至目前不支持 Catalyst。 | 所有现代 Apple 的操作系统。 这对于开发通用 SwiftUI 应用程序至关重要。 |
| 源代码 | 闭源。 所有应用程序和用户数据都可供 Google 使用。 | 开源。 几百行纯 Swift 代码,没有隐式数据提交。 |
| 依赖 | Firebase SDK 的一部分。 带来了一堆带有运行时方法调配的 Objective-C/C++ 代码等。 | 仅依赖 SwiftLog 和 Apple 的嵌入式框架。 |
| 分发 | CocoaPods/Carthage。 由于闭源和依赖关系,目前不支持 SwiftPM。 | SwiftPM,这是首选的,因为它与 Swift 构建系统集成。 |
| 后端 | Google Analytics for Firebase。 包括一些预定义的营销工具。 | GCP Operations(以前称为 Stackdriver)。 灵活的自定义日志视图、指标、通知、导出等。 |
| 集成 | 需要在 Google 中注册您的应用程序。 | 只需要生成一个访问密钥。 |
| 日志记录 | 专有日志记录功能和隐式使用情况跟踪。 | SwiftLog 日志记录 API。 单行连接日志记录后端。 |
在 Xcode 11 或更高版本中打开您的应用程序项目,转到菜单 File -> Swift Packages -> Add Package Dependency... 并粘贴软件包存储库 URL https://github.com/DnV1eX/GoogleCloudLogging.git。
在您的 Web 浏览器中,打开 Google Cloud Console 并创建一个新项目。 在 IAM & Admin -> Service Accounts 中创建一个服务帐户,选择 Logging -> Logs Writer 角色。 在最后一步中,创建并下载私钥,选择 JSON 格式。 您需要将此文件包含在您的应用程序包中。
只需将文件拖到 Xcode 项目中,并在文件检查器中勾选所需的 target。
SwiftLog 和 GoogleCloudLogging 模块import Logging
import GoogleCloudLogging
LoggingSystem.bootstrap(GoogleCloudLogHandler.init)
或者,您可以注册多个后端,例如,为了将日志发送到 GCP 和 Xcode 控制台
LoggingSystem.bootstrap { MultiplexLogHandler([GoogleCloudLogHandler(label: $0), StreamLogHandler.standardOutput(label: $0)]) }
do {
try GoogleCloudLogHandler.setup(serviceAccountCredentials: Bundle.main.url(forResource: /* GCP private key file name */, withExtension: "json")!, clientId: UIDevice.current.identifierForVendor)
} catch {
// Log GoogleCloudLogHandler setup error
}
如果 UIKit 不可用,您可以使用 UUID() 生成随机 clientId 并在应用程序启动之间存储它。
您可以自定义 GoogleCloudLogHandler 的静态变量,这些变量都是线程安全的,并且记录在 源代码中。
建议在隐藏或退出应用程序时显式上传日志,调用
GoogleCloudLogHandler.upload()。
SwiftLog 模块导入到所需的文件中import Logging
logger,它可以是类型、实例或全局常量或变量static let logger = Logger(label: /* Logged class name */)
您可以自定义最小发出的日志级别并设置 logger 元数据。
logger.info(/* Logged info message */)
logger.error(/* Logged error message */, metadata: [LogKey.error: "\(error)"])
最佳实践是定义
typealias LogKey = GoogleCloudLogHandler.MetadataKey并使用您自定义的键扩展它,而不是使用字符串文字。
GoogleCloudLogHandler.globalMetadata优先于Logger元数据,而Logger元数据又优先于日志消息元数据,以防键重叠。
在您的 Web 浏览器中,打开 GCP Operations Logging 并选择您的项目。 您将看到给定时间范围的日志列表,可以按日志名称(logger 标签)、严重性(日志级别)、文本有效负载(消息)、标签(元数据)等进行过滤。 GoogleCloudLogHandler 生成的日志的资源类型始终为全局。
您可以切换到新的 Logs Viewer Preview,它引入了新功能,例如高级日志查询和直方图。
单击所需日志条目的 clientId 标签值,然后选择“Show matching entries”以便仅查看来自同一应用程序实例的日志。
版权所有 © 2020 DnV1eX。 保留所有权利。 根据 Apache License, Version 2.0 获得许可。