⚙️ CLTLogger (Command-Line Tools Logger,命令行工具日志记录器)

Compatible from Swift 5.1 to 6. Compatible with macOS, iOS, visionOS, tvOS and watchOS. Compatible with Linux, Windows, WASI and Android.

一个简单的,与 swift-log 兼容的日志记录器,专为命令行工具设计。

用法 🤓

在创建任何日志记录器之前,使用 CLTLogger 引导 LoggingSystem。

LoggingSystem.bootstrap(CLTLogger.init, metadataProvider: nil/* or whatever you want */)

截图 📺

注意:截图与系统主题(深色模式 vs. 浅色模式)匹配。

在终端中

CLTLogger Log Example.

在 Xcode 中

CLTLogger Log Example.

在终端中,日志和元数据在同一行

CLTLogger Log Example.

常用引导定制 🧰

CLTLogger 的设计初衷是不在其输出中打印日志记录器的标签,也不打印日期。如果需要打印这些信息,可以使用 CLTLogger 的便捷初始化方法,将其添加到日志记录器的元数据中。

LoggingSystem.bootstrap(CLTLogger.initWithLabelAndDateMetadata, metadataProvider: nil/* or whatever you want */)

标签和日期元数据分别命名为 zz-labelzz-date

高级配置 🛠️

CLTLogger 中几乎所有内容都是可配置的。

输出目的地

默认输出目的地是 stderr,但可以使用 FileHandle 更改为任何文件描述符。

将日志记录到 stderr 的理由是日志不是“正常”程序输出,并且在管道传输到另一个程序时应该被忽略。

假设我正在 Swift 中编写一个 sed 程序。在调试时,我想要记录一些信息以便了解我的 bug 在哪里,但我不想让我的 sed 的输出与日志交织在一起!所以我们记录到 stderr

多行模式

假设我们运行以下代码

Logger(label: "main").info(
   """
   The following actions are taking place:
      - Demonstrate CLTLogger;
      - Reticulate splines;
      - End with a big finish.
   """,
   metadata: [
      "demo-mode": "amazing",
      "splines-count": "4200",
   ])

以下是使用颜色日志样式的可能输出。

不允许使用多行,但元数据在新行上

这是默认模式。 CLTLogger Log Example.

允许使用多行

CLTLogger Log Example.

不允许使用多行,但元数据在一行新行上

CLTLogger Log Example.

完全不允许使用多行

CLTLogger Log Example.

允许使用多行,元数据在最后一行

CLTLogger Log Example.

允许使用多行,元数据在同一行,除非日志是多行

此处的名称是不言自明的。

日志样式

您可以强制使用特定的日志样式,并忽略 CLTLOGGER_LOG_STYLE 环境变量。 不建议这样做。

配置所有内容

创建 CLTLogger 实例时,可以为每个日志级别传递一些 CLTLogger.Constants

此结构允许配置

元数据日志格式 📖

我们想要一种符合以下约束的日志格式