SteamcLog 0.5.0

SteamcLog 0.5.0

Jacob Miner 维护。



 
依赖
XCGLogger~> 7.0.1
Sentry~> 5.1
 

SteamcLog 0.5.0

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 详细 详细
开发 调试
发布 警告
发布高级 详细 警告

在大多数情况下,您可以使用调试构建时的 firehosedevelop,以及发布构建时的 releasereleaseAdvanced。请注意,如果您使用 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)