概述
为TraceLog日志系统实现的Writer,该系统能将日志记录到其所在平台的系统日志设施。
- Apple统一日志(Darwin) - 在Apple平台上,AdaptiveWriter将写入统一日志系统。
- Linux systemd日志(Linux) - 在Linux平台上,AdaptiveWriter写入systemd日志。
有关更多详细信息,请参阅TraceLog(https://github.com/tonystone/tracelog)。
使用方法
TraceLog可以通过配置多个自定义日志写入器来配置,这些写入器将日志语句输出到所需位置。默认情况下,它通过配置ConsoleWriter并将其传递给TraceLog的配置方法来自身配置。要安装并替换ConsoleWriter
的AdaptiveWriter
,只需创建一个实例并将其传递给TraceLog的配置方法。
TraceLog.configure(writers: [AdaptiveWriter()])
AdaptiveWriter使用每个平台的默认值(进程名称)作为子系统(在统一日志中的subsystem
和systemd日志中的SYSLOG_IDENTIFIER
)来记录消息。此值可通过在init
时间传递子系统参数来覆盖。例如
TraceLog.configure(writers: [AdaptiveWriter(subsystem: "CustomSubsystemName")])
由于TraceLog及其底层日志系统的日志级别可能不同,AdaptiveWriter使用转换表将TraceLog定义的级别(如TraceLog.LogLevel.info
)转换为平台级别(如Darwin的统一日志系统中的OSLogType.default
)。
AdaptiveWriter为每个平台包含默认转换表。
Apple统一日志系统 - 转换表
TraceLog.LogLevel | OSLogType | |
---|---|---|
.error |
-> | .error |
.warning |
-> | .default |
.info |
-> | .default |
.trace1 |
-> | .debug |
.trace2 |
-> | .debug |
.trace3 |
-> | .debug |
.trace4 |
-> | .debug |
Linux Systemd日志 - 转换表
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 |
安装(Swift 包管理器)
TraceLogAdaptiveWriter 支持 Swift 包管理器在所有 Apple 操作系统版本以及 Linux 上的依赖关系管理。
有关更多信息,请参阅 Swift 包管理器。
安装(CocoaPods)
TraceLog 通过 CocoaPods 提供。只需将以下行添加到您的 Podfile 中
pod "TraceLog", "~> 5.0.0"
pod "TraceLogAdaptiveWriter"
鸣谢
- Tony Stone (https://github.com/tonystone) - 作者
- Félix Fischer (https://github.com/felix91gr) - 灵感、规划、代码 & 测试
- Ryan Lovelett (https://github.com/RLovelett) - 灵感和规划
许可
TraceLogAdaptiveWriter 在 Apache License, Version 2.0 许可下发布。