一个自定义的日志记录器实现,以及用于 Swift-Log 的 TaskLocal 助手。
这个包提供了两个半东西(和一个小小的奖励)
Logger
结构体提供 TaskLocal 支持import Logging
,所以您不必这么做了 (.mp4),只需导入 LGNLog
即可工作根据这个包,Logger
现在具有 @TaskLocal var current
属性,它的功能正如您所想:您的应用程序可以在您能想到的任何地方调用 Logger.current
来获取当前 logger,而您不必在这里和那里创建新的临时 logger。默认情况下,它只是一个带有标签 default
的简单 logger。当然,您可以像这样将它绑定到为某些异步 Task
配置的 logger
var logger = Logger(label: "custom_label")
logger[metadataKey: "requestID"] = "\(UUID())"
logger[metadataKey: "FileLine"] = "main.swift:322"
Logger.$current.withValue(logger) {
Logger.current.info("hello")
}
就是这样。
当然,默认的格式不是很漂亮
2021-10-23T17:51:14+0300 info custom_label : FileLine=main.swift:322 requestID=00000000-1637-0034-1711-000000000000 Hello
所以这个包带有一个更漂亮的格式。您可以通过调用以下命令启用它
LoggingSystem.bootstrap(LGNLogger.init)
瞧!
[2021-10-24 13:01:57 +0000 @ main.swift:322] [custom_label] [info] [00000000-1637-0034-1711-000000000000]: Hello (metadata: {"FileLine":"main.swift:322"})
此外,它还有一些配置变量
LGNLogger.logLevel = .trace
LGNLogger.hideTimezone = true
LGNLogger.hideLabel = true
LGNLogger.requestIDKey = "customRequestIDKey"