SteamcLog
这是一个开源库,它将 Steamclock 所有项目中日志设置和使用的规范合并/格式化。
安装
将以下内容添加到您的 podfile 然后 run pod install
pod 'SteamcLog', :git => "[email protected]:steamclock/steamclog.git"
注意:如果您的项目正在使用 Crashlytics、Fabric 或 XCGLogger,您可以从 podfile 中删除它们,因为它们将作为依赖项自动导入 SteamcLog。
在您的 AppDelegate (或一个日志管理器) 中设置一个全局的 SteamcLog 实例
import SteamcLog
// defined globally
#if DEBUG
private let config = Config(logLevel: .firehose) // this will be used in debug builds.
#else
private let config = Config(logLevel: .release) // this will be used for release builds
#endif
let clog = SteamcLog(config: config)
class AppDelegate: UIApplicationDelegate {
// ...
}
有关 logLevel
的详细信息,请参阅配置文档这里.
对于 Crashlytics 支持,请按照官方 Crashlytics 文档中的说明操作,跳过 podfile 的更改。
配置
SteamcLog 有多个配置选项
logLevel: LogLevelPreset
默认值是: develop
。有四个日志级别预设可供选择,每个预设都有不同的日志输出。
日志级别预设 | 磁盘级别 | 系统级别 | 远程级别 |
---|---|---|---|
firehose |
详细 | 详细 | 无 |
开发 |
无 | 调试 | 无 |
发布 |
无 | 无 | 警告 |
发布高级 |
详细 | 无 | 警告 |
在大多数情况下,您可以使用调试构建时的 firehose
或 develop
,以及发布构建时的 release
或 releaseAdvanced
。请注意,如果您使用 releaseAdvanced
,则必须以使客户端可以通过电子邮件发送磁盘日志的方式进行构建。
requireRedacted: Bool
默认值是 false
。要求所有已记录的对象符合 Redacted 规范或默认使用 Redacted。
autoRotateConfig: AutoRotateConfig
默认情况下,日志将在每10分钟轮换一次,存储10个归档日志文件。《AutoRotateConfig》允许自定义自动轮换行为。
AutoRotateConfig
缺省字段如下: fileRotationTime: TimeInterval:日志文件轮换和存档前的秒数。
用法
从那里,您可以在应用程序中的任何地方使用以下级别的 clog
。请注意,这些日志的可用性取决于您配置中的 logLevel
。
clog.verbose
- 记录所有内容!通常只有开发人员将输出到控制台,而不是设备。 clog.debug
- 对开发人员有趣的有趣信息,任何在调试时可能有所帮助的信息。应该在调试构建中存储到系统日志但永远不会存储在生产中。 clog.info
- 程序的正常操作,用于记录应用程序状态中的状态更改。生产中设备日志中存储的日志最低级别。 clog.warn
- 开发人员问题或错误的系统状态等。肯定出错了,但有一条恢复路径 clog.error
- 发生错误,报告给远程服务(如 Crashlytics) clog.fatal
- 发生错误,我们无法恢复,因此强制应用程序关闭。
每个这些函数都有以下 3 种可用的签名 clog.<level>(_ message: String)
clog.<level>(_ message: String, object: Encodable)
clog.<level>(_ message: String, object: Redacted)
导出日志
日志文件URL可以通过 logFileURL() -> URL
获取,或者您可以使用 clog.getLogFileContents() -> String?
获取日志文件内容。
变量擦除
Redacted
是一个协议,允许结构体或类标记特定字段,使其安全地用于日志记录。默认情况下,符合 Redacted
协议的类/结构体将所有字段标记为擦除,您可以使用 safeProperties
字段定义日志安全字段。
示例
import SteamcLog
struct User: Codable, Redacted {
static var safeProperties = Set<String>(["name", "email"])
let name: String
let uuid: UUID
let email: String
let created: Date
}
在这种情况下,当一个 User
对象通过 Steamclog 进行日志记录时,会记录如下内容
let sampleUser = User(name: "Name", uuid: UUID(), email: "[email protected]", created: Date())
clog.info("Here's a simple model", sampleUser)
日志输出将如下
用户(name: "Name", uuid: <redacted>, email: "[email protected]", created: <redacted>)
与 Netable 一起使用 SteamcLog
如果您也在使用 Netable,可以直接将日志从 Netable 呼入 SteamcLog。
首先,在您的 Podfile 中更改
pod 'SteamcLog', :git => "[email protected]:steamclock/steamclog.git"
为
pod 'SteamcLog/Netable', :git => "[email protected]:steamclock/steamclog.git"
然后,在创建您的 Netable 实例时,将日志目的地设置为 RedactedLogDestination
并传递对您的 Steamclog 实例的引用,如下所示
let netable = Netable(baseURL: URL(string: "https://api.thecatapi.com/v1/")!, logDestination: RedactedLogDestination(clog: clog)