LoggingFormatAndPipe 提供了一个 Swift Logging API Handler,允许你自定义日志消息的格式以及它们的输出目标。
如果你不喜欢默认的日志格式,可以将其更改为你想要的格式。 如果你希望一个输出目标的格式与另一个输出目标不同,你可以轻松做到这一点。 或者将相同的格式发送到多个输出目标!
要在你的项目中使用 LoggingFormatAndPipe 库,请在你的 Package.swift
文件中添加以下内容
.package(url: "https://github.com/adorkable/swift-log-format-and-pipe.git", .from("0.1.2")),
LoggingFormatAndPipe.Handler
需要一个 Formatter
和一个 Pipe
let logger = Logger(label: "example") { _ in
return LoggingFormatAndPipe.Handler(
formatter: ...,
pipe: ...
)
}
示例
let logger = Logger(label: "example") { _ in
return LoggingFormatAndPipe.Handler(
formatter: BasicFormatter.adorkable,
pipe: LoggerTextOutputStreamPipe.standardOutput
)
}
有很多方法可以自定义格式,但通常由 LogComponents
的组合组成
.timestamp
- 日志的时间戳.level
- 日志级别.message
- 实际消息.metadata
- 日志元数据.file
- 日志的源文件.line
- 日志的源文件中的行号.function
- 日志的源函数.text(String)
- 静态文本.group([LogComponents])
- Formatters 可以根据其格式以各种方式分隔指定的 LogComponents
,.group
告诉 Formatter 组合 LogComponents
而不使用其分隔符BasicFormatter
允许你指定 LogComponents
的序列和分隔符字符串,并自动将它们处理成每条新日志消息的单行。
它已经包含已设置的静态实例
.apple
- apple/swift-log 格式
{timestamp} {level}: {message}
示例
2019-07-30T13:49:07-0400 错误: 测试错误消息
.adorkable
- Adorkable 的标准格式 😘
{timestamp} ▶ {level} ▶ {file}:{line} ▶ {function} ▶ {message} ▶ {metadata}
示例
2019-07-30T13:49:07-0400 ▶ 错误 ▶ /asdf/swift-log-format-and-pipe/Tests/LoggingFormatAndPipeTests/FormatterTests.swift:25 ▶ testFormatter(_:) ▶ 测试错误消息
如果这些都不起作用,你可以自定义你自己的实例!
假设你想要一个特殊的短日志格式,其中包含时间戳、级别、源文件和消息本身
let myFormat = BasicFormatter(
[
.timestamp,
.level,
.file,
.message
]
)
要将分隔符从单个空格更改为指定分隔符参数
let myFormat = BasicFormatter(
...,
separator: "|"
)
请注意,BasicFormatter
不会为 nil
元数据添加空字符串和分隔符。
要从默认值更改时间戳
let myDateFormat = DateFormatter()
myDateFormat.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
let myFormat = BasicFormatter(
...,
timestampFormatter: myDateFormat
)
你还可以通过实现以下内容来创建自己的 Formatter
一致性对象
var timestampFormatter: DateFormatter { get }
func processLog(level: Logger.Level, message: Logger.Message, prettyMetadata: String?, file: String, function: String, line: UInt) -> String
更多 formatters 即将推出!
管道指定格式化的日志行最终去往何处。 已经包括的有
LoggerTextOutputStreamPipe.standardOutput
- 将日志行输出到 stdout
LoggerTextOutputStreamPipe.standardError
- 将日志行输出到 stderr
更多管道即将推出!
你还可以通过实现以下内容来创建自己的 Pipe
一致性对象
func handle(_ formattedLogLine: String)
简单!
现在你已经让你的用例格式化的日志行以这种方式传播,真是太棒了 🖤
要更深入地了解库,请在 repo here 中找到 API 文档