swift-cutelog

用于 cutelog 的标准 swift-log 处理程序。

允许在 GUI 中显示本地日志,并具有搜索和过滤功能(类似于 NSLogger)。

特性

手册

安装 cutelog

  1. 按照 cutelog README 上的说明进行操作
  2. 使用 pip install msgpack 安装 MessagePack 序列化器

如何使用

  1. 在您的应用程序启动时,创建一个 单独的 CutelogLogger,并指定所需的地址和端口
    • 如果您需要报告任何网络错误或故障,您可以为其指定自己的 logger
    • 您还可以指定自定义的 DispatchQueue
  2. LoggingSystem.bootstrap 工厂中,调用 makeHandler(label:logLevel:) 以获取绑定到此 logger 的 LogHandler
import Cutelog
import Logging

// Create the logger, this will initiate the remote connection
let cutelogLogger = CutelogLogger(
    address: "127.0.0.1",
    port: Cutelog.defaultPort,
    internalLogger: nil // add one to display any networking errors or failures
)

// Will be called when a new `Logger` is created
LoggingSystem.bootstrap { label in
    return cutelogLogger.makeHandler(label: label, logLevel: .info)
}

// Then use swift-log normally

let logger = Logger(label: "Demo")

logger.info("Hello world!")

警告 LoggingSystem.bootstrap 工厂将在每次创建新 logger 时被调用 - 不要在工厂中创建 CutelogLogger,这将为应用程序中的每个新 logger 建立新连接。相反,创建 logger 一次,然后在工厂中调用 makeHandler(label:logLevel:) 以获取绑定到此 logger 的处理程序。

如何在测试环境中使用

为测试启用日志

要为测试启用日志,您只需以与正常运行应用程序时相同的方式引导日志系统即可。

由于测试不能有命令行参数,您可以改用环境变量来获取远程地址并启用 cutelog:CUTELOG_ADDRESS=127.0.0.1 LOGLEVEL=trace swift test

在调用 XCTestMain 之前执行此操作,它应该可以正常工作。

刷新日志

由于 swift-cutelog 是缓冲和异步的,测试通常会在 swift-cutelog 完成发送所有日志之前完成。 这会导致测试结束时日志被截断(因为没有优雅的退出)。

为了解决这个问题,logger 有一个 flush() 方法,它将同步刷新缓冲区并将所有剩余的日志发送到 cutelog(如果已连接)。这通常需要一些时间并会阻塞 cutelog。

由于 XCTestMain 永远不会返回 🙃,您需要创建一个在最后运行的虚拟测试用例,以刷新 logger。

嵌套命名空间

cutelog 命名空间映射到 swift-log logger 标签。

您可以使用点作为分隔符来创建嵌套命名空间,这些命名空间在 cutelog 侧边栏中显示良好:let logger = Logger(label: "MyApp.Engine.Physics")。这将在 cutelog 中显示为 MyApp > Engine > Physics

元数据

元数据会自动发送到 cutelog,并在选择日志条目时显示在底部表格中。

您不能使用以下名称作为元数据,因为它们是保留的

冲突的元数据键将被忽略。