一个简单的,与 swift-log 兼容的日志记录器,专为命令行工具设计。
在创建任何日志记录器之前,使用 CLTLogger
引导 LoggingSystem。
LoggingSystem.bootstrap(CLTLogger.init, metadataProvider: nil/* or whatever you want */)
注意:截图与系统主题(深色模式 vs. 浅色模式)匹配。
CLTLogger
的设计初衷是不在其输出中打印日志记录器的标签,也不打印日期。如果需要打印这些信息,可以使用 CLTLogger
的便捷初始化方法,将其添加到日志记录器的元数据中。
LoggingSystem.bootstrap(CLTLogger.initWithLabelAndDateMetadata, metadataProvider: nil/* or whatever you want */)
标签和日期元数据分别命名为 zz-label
和 zz-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_STYLE
环境变量。 不建议这样做。
创建 CLTLogger
实例时,可以为每个日志级别传递一些 CLTLogger.Constants
。
此结构允许配置
‼️
);\n
……)。我们想要一种符合以下约束的日志格式
CLTLogger
使用颜色;#""#
引号字符串中。可以设置 CLTLOGGER_LOG_STYLE
环境变量,以强制 CLTLogger
使用以下方式区分日志级别
color
的颜色;emoji
的表情符号;text
的纯文本;none
的无区分。可以设置 CLTLOGGER_EMOJI_SET_NAME
环境变量,在使用表情符号记录时使用不同的表情符号集。支持的集合是
ORIGINAL: ‼️ - ❗️ - ⚠️ - 🗣 - 📔 - ⚙️ - 💩
SWIFTY_BEAVER: 🟥 - 🟥 - 🟨 - 🟦 - 🟦 - 🟩 - ⬜️
CLEANROOM_LOGGER: ❌ - ❌ - 🔶 - 🔷 - 🔷 - ◾️ - ◽️
VAIBHAVSINGH97_EMOJI_LOGGER: 🚑 - 😱 - ⚠️ - ✅ - 🧐 - 🐞 - 🐞
NO_ALTERNATES: ❌ - 🔴 - 🟠 - 🟡 - 🟢 - 🟣 - ⚪️
某些表情符号可能会根据您的环境而变化,因为有时表情符号无法正确显示。只有 NO_ALTERNATES
集合才能保证在任何地方看起来都一样。
可以设置 CLTLOGGER_OUTPUT_ENV
环境变量,以使 CLTLogger
假定其运行的给定环境。支持的值为
XCODE
MACOS_TERMINAL
MACOS_ITERM2
MACOS_VSCODE
MACOS_UNKNOWN
WINDOWS_TERMINAL
(此值永远不会自动检测到:我们不知道如何检测它 (TERM_PROGRAM
未设置)。)WINDOWS_CONSOLE
(此值永远不会自动检测到:我们不知道如何检测它。)WINDOWS_VSCODE
WINDOWS_UNKNOWN
UNKNOWN_VSCODE
UNKNOWN
这在 CLTLogger
在未知环境中运行时(例如,在 Docker 中几乎不可能知道输出将在 Apple 终端或其他设备中读取)最有用。
输出环境目前仅用于在使用表情符号记录时修复对齐和其他极端情况。