在 OSX 10.8 中,输出到 stdout 和 stderr 不再以 Console.app 结尾。我想在不使用 NSLog 的情况下在 Console.app 中获得输出,因为我需要支持使用基本打印语句来打印调试信息的代码(有关一些背景信息,请参阅https://bitbucket.org/ronaldoussoren/py2app/issue/77)。
NSLog 输出“以某种方式”出现在 ASL(Apple 系统日志)日志中,因为您可以使用“syslog -C”查看这些日志行。这就是我尝试将此代码添加到我的应用程序的原因:
aslclient c = asl_open("py2app", "com.apple.console", ASL_OPT_NO_DELAY);
int fd = dup(2);
asl_set_filter(c, ASL_FILTER_MASK_UPTO(ASL_LEVEL_DEBUG));
asl_add_log_file(c, fd);
asl_log(c, NULL, ASL_LEVEL_INFO, "Hello world from py2app launcher");
asl_log_descriptor(c, NULL, ASL_LEVEL_INFO, 1, ASL_LOG_DESCRIPTOR_WRITE);
asl_log_descriptor(c, NULL, ASL_LEVEL_INFO, 2, ASL_LOG_DESCRIPTOR_WRITE);
这有点工作:当我将行写入标准输出流时,这些行被 ASL 转换:输出现在以通常的日志记录前缀为前缀:
Nov 20 13:46:14 Gondolin.local py2app[43722] <Info>: Hello world from py2app launcher
但是,日志文件不会最终出现在 ASL 数据存储区或 Console.app 中。
有谁知道我做错了什么?