Apple的Unified Logging
documentation状态:
消息中不包括符号信息或源文件行号。系统会自动捕获此信息。
但是在控制台中,我看不到文件名,类名,函数名或行号。
如何将这些记录在日志中?
答案 0 :(得分:3)
os_log
当前未在Console.app中或通过log stream
命令提供Swift代码的行号/功能名称。
如果您确实需要它-您可以使用Literal Expressions通过NSLog
或os_log
手动传递信息,如下所示:
os_log(.info, "Log message from file: %s, line: %i, column: %i", #file, #line, #column)
将os_log
包装为始终包含此信息可能很诱人,但Apple建议出于性能原因不建议这样做。
答案 1 :(得分:1)
实际上,甚至macOS Catalina beta(内部版本19A501i)也没有在 Console.app 中显示源代码行。
但是,log
命令行工具确实显示了模拟设备的源信息(从macOS 10.14开始)。
以下命令将显示当前在模拟器中启动(运行)的所有模拟设备的日志信息。如果当前没有正在运行的模拟设备,该命令将失败。
xcrun simctl spawn booted log stream --level debug --color always --source
您可以通过在os_log
调用中使用子系统,并对流式记录的数据应用谓词,来过滤掉程序中所有不包含的内容。例如,如果您的子系统是com.subsystem.my
,则可以使用
xcrun simctl spawn booted log stream --level debug --color always --predicate '(subsystem BEGINSWITH "com.subsystem.my")' --source
源代码信息将显示在TTL列之后。
如果您未设置子系统,还可以按进程(即目标的名称)进行过滤
xcrun simctl spawn booted log stream --level debug --color always --predicate '(process == "MyProcess")' --source
但是,由于其他框架记录的信息也将包括在内,因此通常会导致日志消息过多。
此外,您可以使用实际模拟设备的名称代替booted
(仅从该设备流式传输日志数据)。