Writer
接口的实现,用于 TraceLog 日志系统,可将日志记录到其运行平台上的系统日志工具。
有关更多详细信息,请参阅 TraceLog (https://github.com/tonystone/tracelog)。
TraceLog 可以配置多个自定义日志写入器,这些写入器负责将日志语句输出到所需的位置。 默认情况下,它会使用 ConsoleWriter
进行配置,该写入器会输出到 stdout
。 要安装 AdaptiveWriter
以替换 ConsoleWriter
,只需创建一个实例并将其传递给 TraceLog 的 configure 方法即可。
TraceLog.configure(writers: [AdaptiveWriter()])
AdaptiveWriter 在每个平台上使用默认值(进程名称)作为子系统(Unified Logging 中的 subsystem
和 systemd journal 中的 SYSLOG_IDENTIFIER
)来记录消息。 该值可以在 init
时通过传递 subsystem 参数来覆盖。 例如
TraceLog.configure(writers: [AdaptiveWriter(subsystem: "CustomSubsystemName")])
由于 TraceLog 和底层日志系统的 LogLevel 可能不同,AdaptiveWriter 使用转换表将 TraceLog 定义的级别(例如 TraceLog.LogLevel.info
)转换为平台级别(例如 Darwin Unified Logging System 中的 OSLogType.default
)。
AdaptiveWriter 包含每个平台的默认转换表。
TraceLog.LogLevel | OSLogType | |
---|---|---|
.error |
-> | .error |
.warning |
-> | .default |
.info |
-> | .default |
.trace1 |
-> | .debug |
.trace2 |
-> | .debug |
.trace3 |
-> | .debug |
.trace4 |
-> | .debug |
TraceLog.LogLevel | PRIORITY | |
---|---|---|
.error |
-> | LOG_ERR |
.warning |
-> | LOG_WARNING |
.info |
-> | LOG_INFO |
.trace1 |
-> | LOG_DEBUG |
.trace2 |
-> | LOG_DEBUG |
.trace3 |
-> | LOG_DEBUG |
.trace4 |
-> | LOG_DEBUG |
如果默认表不适用于您的特定用例,AdaptiveWriter 允许您在创建时覆盖默认转换表。 以下是一些示例
设置一个空表会将所有 TraceLog 级别转换为正在使用的平台的默认级别。 在 Darwin 上,它是 OSLogType.default
,在 Linux 上,该值为 LOG_INFO
。
///
/// Linux/Darwin
///
let adaptiveWriter = AdaptiveWriter(logLevelConversion: [:])
设置一个或多个级别将设置指定的级别,所有未指定的级别都将转换为平台默认级别。 要设置一个值,您必须将系统定义的值包装在 AdaptiveWriter 的 Platform.LogLevel
类型中。 这将在每个平台上转换为正确的类型。
///
/// Darwin Example
///
let adaptiveWriter = AdaptiveWriter(logLevelConversion: [.error: Platform.LogLevel(OSLogType.error.rawValue)])
您也可以指定一个完整的转换表来更改所有值。
///
/// Darwin Example
///
let darwinLogConversionTable: [TraceLog.LogLevel: Platform.LogLevel] = [
.error: Platform.LogLevel(OSLogType.default.rawValue),
.warning: Platform.LogLevel(OSLogType.default.rawValue),
.info: Platform.LogLevel(OSLogType.default.rawValue),
.trace1: Platform.LogLevel(OSLogType.debug.rawValue),
.trace2: Platform.LogLevel(OSLogType.debug.rawValue),
.trace3: Platform.LogLevel(OSLogType.debug.rawValue),
.trace4: Platform.LogLevel(OSLogType.debug.rawValue)
]
let adaptiveWriter = AdaptiveWriter(logLevelConversion: darwinLogConversionTable)
///
/// Linux Example
///
let linuxLogConversionTable: [TraceLog.LogLevel: Platform.LogLevel] = [
.error: Platform.LogLevel(LOG_INFO),
.warning: Platform.LogLevel(LOG_INFO),
.info: Platform.LogLevel(LOG_INFO),
.trace1: Platform.LogLevel(LOG_DEBUG),
.trace2: Platform.LogLevel(LOG_DEBUG),
.trace3: Platform.LogLevel(LOG_DEBUG),
.trace4: Platform.LogLevel(LOG_DEBUG)
]
let adaptiveWriter = AdaptiveWriter(logLevelConversion: linuxLogConversionTable)
构建环境
平台 | Swift | Swift 构建 | Xcode |
---|---|---|---|
Linux | 5.0 | ✔ | ✘ |
OSX | 5.0 | ✔ | Xcode 10.x |
注意:在 Linux 上编译需要构建系统上安装 libsystemd-dev。 使用
apt-get install libsystemd-dev
安装它。
最低运行时版本
iOS | OS X | tvOS | watchOS | Linux |
---|---|---|---|---|
10.0 | 10.12 | 10.0 | 3.0 | Ubuntu 14.04, 16.04, 16.10 |
TraceLogAdaptiveWriter 支持通过 Swift Package Manager 在所有 Apple OS 变体以及 Linux 上进行依赖项管理。
有关更多信息,请参阅 Swift Package Manager。
TraceLog 可通过 CocoaPods 获得。 只需将以下行添加到您的 Podfile
pod "TraceLog", "~> 5.0.0"
pod "TraceLogAdaptiveWriter"
TraceLogAdaptiveWriter 在 Apache License, Version 2.0 下发布