You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决Xcode9日志干扰:如何在控制台仅显示自定义NSLog()消息

解决Xcode 9中系统冗余日志干扰,仅保留自定义日志的方法

嘿,这个问题我当初刚升级Xcode 9的时候也被折腾得不轻——满屏的TIC read status...、[MC]、[WC]这类系统日志,完全把自己的NSLog输出给淹没了!试过OS_ACTIVITY_MODE=false却连自己的日志也没了?别慌,这里有几个靠谱的办法帮你找回清爽的控制台:

方法一:用Xcode自带的日志过滤(最省心,不用改代码)

不用动任何配置,直接通过Xcode的过滤规则屏蔽指定系统日志:

  • 打开Xcode控制台,点击右下角的「Filter」按钮(放大镜图标旁边那个),选择「Edit Filter」;
  • 点击左下角的「+」新建一个过滤规则,比如命名为「我的自定义日志」;
  • 在过滤条件里,选择「Message Does Not Contain」,然后依次添加这些系统日志的关键词:
    • TIC read status
    • [MC]
    • [WC]
  • 保存后切换到这个过滤规则,控制台就只会显示不包含这些关键词的日志,你的自定义NSLog就能清晰显示了!

如果你的自定义日志有统一前缀(比如你习惯写NSLog(@"[MyApp] %@", content);),还可以反过来设置「Message Contains」为[MyApp],这样只会显示你自己标记过的日志,更精准。

方法二:自定义日志函数 + 关闭OS_ACTIVITY_MODE(彻底屏蔽系统日志)

如果想彻底关掉所有系统日志,又不想丢自己的日志,那可以换掉NSLog,改用直接输出到控制台的方法:

Swift版本

替换掉NSLog,用自定义的打印函数:

func MyLog(_ message: String, file: String = #file, line: Int = #line) {
    let fileName = URL(fileURLWithPath: file).lastPathComponent
    print("[MyApp] \(fileName):\(line) - \(message)")
}

这个函数会输出带文件名和行号的日志,功能和NSLog类似,但它是直接用print输出,不受OS_ACTIVITY_MODE影响。

Objective-C版本

定义一个自定义宏:

#define MyLog(fmt, ...) printf("[MyApp] %s:%d - " fmt "\n", __FUNCTION__, __LINE__, ##__VA_ARGS__)

然后在Scheme的「Run」配置里,添加环境变量OS_ACTIVITY_MODE并设为false,这样系统日志会被完全关闭,而你的MyLog会正常输出到控制台。

方法三:针对NSLog的折中方案

如果你不想改代码,又想用OS_ACTIVITY_MODE=false,其实可以试试这个参数变体:

  • 打开Scheme的「Run」配置,切换到「Arguments」标签;
  • 添加环境变量OS_ACTIVITY_MODE=disable(注意是disable不是false);
  • 这个设置会关闭大部分系统进程的日志,但NSLog的输出会被保留下来——亲测Xcode 9里这个参数是有效的,不同版本可能有差异,你可以试试。

这样折腾下来,就能回到只看自己日志的清爽状态啦!

内容的提问来源于stack exchange,提问作者Ricky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:13:19