用于 cutelog 的标准 swift-log 处理程序。
允许在 GUI 中显示本地日志,并具有搜索和过滤功能(类似于 NSLogger)。
pip install msgpack
安装 MessagePack 序列化器CutelogLogger
,并指定所需的地址和端口DispatchQueue
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,并在选择日志条目时显示在底部表格中。
您不能使用以下名称作为元数据,因为它们是保留的
name
message
levelname
created
file
line
function
冲突的元数据键将被忽略。