LGNLog

一个自定义的日志记录器实现,以及用于 Swift-LogTaskLocal 助手。

原因和方法

这个包提供了两个半东西(和一个小小的奖励)

TaskLocal

根据这个包,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"})

此外,它还有一些配置变量

为使用此后端启动的所有 logger 全局设置日志级别(默认为 .info

LGNLogger.logLevel = .trace

从日志消息中隐藏时区(节省一些字节)(默认为 false

LGNLogger.hideTimezone = true

从日志消息中隐藏标签(默认为 false

LGNLogger.hideLabel = true

从元数据中获取请求 ID 并将其放在序言中(默认为 requestID

LGNLogger.requestIDKey = "customRequestIDKey"