Clash 运行日志怎么看?常见报错含义与定位方法

教你打开并读懂 Clash 客户端运行日志,逐条解释连接超时、订阅解析失败、端口占用等常见报错的含义与排查顺序。

一、先把日志打开:三个入口

做法先行。不管用的是哪个客户端,日志都来自同一个地方——内核。图形界面只是订阅了内核的输出,所以各客户端里看到的报错文本是同一份;学会读文本,就等于通了所有客户端。入口按使用方式分三类:

  1. 图形客户端的日志页。Clash Verge Rev 在左侧导航有「日志」一项,点进去就是实时滚动的内核日志,顶部可按等级筛选;Clash for Windows 对应「Logs」板块,同样支持按等级过滤。
  2. 内核配置里的 log-level。直接运行 mihomo 内核时,日志输出到终端,详细程度由配置文件里的 log-level 字段控制,可选 silenterrorwarninginfodebug 五档,默认 info
  3. 外部控制器接口。内核开启 external-controller(常见地址 127.0.0.1:9090)后,/logs?level=info 接口会持续推送日志流,图形客户端的日志页走的就是这条通道。

注意:在界面上切换筛选等级,只改变「显示哪些」,不改变内核实际记录的内容。想让内核记更细的日志,要改 log-level 并重启内核或重载配置才生效。

二、一行日志里有什么:时间、等级、连接

先看一条典型的 info 级运行日志(各客户端显示格式略有差异,要素相同):

2026-06-19 21:03:11 INFO [TCP] 127.0.0.1:52341 --> www.example.com:443 match DomainSuffix(example.com) using 香港节点

把它拆成四段:

  • 时间 2026-06-19 21:03:11:排查时先靠它对齐你进行操作的时刻,操作之前的日志与本次问题无关;
  • 等级 INFO:从低到高依次是 debug、info、warning、error,等级越高越值得停下来看;
  • 连接 [TCP] 127.0.0.1:52341 --> www.example.com:443:左边是本机来源地址与临时端口,右边是访问目标与端口;
  • 结果 match DomainSuffix(example.com) using 香港节点:这条连接命中了哪条规则、被交给哪个出口——出口可以是节点、DIRECT(直连)或 REJECT(拒绝)。

再讲为什么长这样。Clash 的工作模型是「来一条连接、查一遍规则表、交给一个出口」,所以运行期日志几乎全是这一句式。读日志的本质就是核对三件事:目标对不对、规则命中对不对、出口对不对。三件事都对而仍然不通,问题才轮到节点与线路。

三、五类常见报错逐条讲

1. 连接超时:i/o timeout

2026-06-19 21:04:02 WARN [TCP] dial 香港节点 127.0.0.1:52341 --> www.google.com:443 error: dial tcp 203.0.113.8:443: i/o timeout

含义:内核向节点服务器发起连接,直到超时也没等到回应。context deadline exceeded 是它的另一种写法,含义相同。排查按「节点 → 线路 → 本机」的顺序:

  1. 在节点列表做延迟测试:全部超时,多半是订阅过期或本地断网;单个超时,是该节点的问题;
  2. 换一个节点访问同一目标,能通即可确认原节点失效;
  3. 所有节点都不通时,让同一目标改走 DIRECT 试一次,直连也不通就是本机网络本身的故障。

原因:timeout 只说明「没等到回应」,并不区分节点宕机、线路被干扰还是本地断网,所以必须逐层排除,不能一看到超时就换客户端。

2. 订阅与配置解析失败

2026-06-19 21:05:40 ERROR configuration file error: yaml: unmarshal errors: line 86: cannot unmarshal !!str into map[string]interface {}

含义:配置文件第 86 行附近的 YAML 结构不对,内核拒绝启动。常见诱因有三种:手动编辑后缩进错乱;订阅链接返回的不是 YAML,而是一段网页错误提示;配置里混入了当前内核不认识的字段。另一种常见形态:

2026-06-19 21:05:41 ERROR proxy 3: unsupport proxy type: hysteria

含义:第四个节点(序号从 0 开始数)使用了内核不支持的协议。原版 Clash 内核不认识 hysteria、tuic 等新协议,需要换用 mihomo(Clash Meta)内核的客户端,客户端对比页有各家的内核说明。

排查顺序:报错给了行号就定位到行号,给了节点序号就数到该节点;订阅导入失败时,把订阅链接粘到浏览器里打开——返回乱码或错误页,说明订阅本身有问题;能返回大段文本,说明问题在客户端的解析环节。

3. 端口占用:bind error

2026-06-19 21:06:15 ERROR start mixed(http+socks) proxy error: listen tcp 127.0.0.1:7890: bind: address already in use

含义:内核要监听的 7890 端口已被别的进程占用,代理服务起不来。Windows 上同一报错写作「Only one usage of each socket address is normally permitted」。排查顺序:

  1. 最常见的原因是上一个 Clash 实例没退干净。打开任务管理器,找残留的 clash、mihomo、clash-verge 进程,结束后再启动;
  2. 确认端口被无关程序占用时,改客户端设置里的混合端口(例如从 7890 换成 7897),保存并重启内核。

原因:监听端口是独占资源,同一时刻只能归一个进程。这类报错的解法永远是两步——先找到占用者,再决定是结束它,还是自己换端口。

4. DNS 解析失败

2026-06-19 21:07:33 WARN [TCP] dial DIRECT 127.0.0.1:52410 --> api.example.com:443 error: dns resolve failed: couldn't find ip

含义:内核解析不出目标域名的 IP,连接在查地址这一步就停了。先检查客户端的 DNS 设置是否被改乱,恢复默认再试;再确认系统本身能正常解析(不开代理时浏览器能否上网)。使用 fake-ip 模式时这类报错较少出现;若频繁出现,可在 DNS 配置里加入 223.5.5.5119.29.29.29 等公共 DNS 作为默认解析器。

5. TUN 模式启动失败

2026-06-19 21:08:20 ERROR start TUN listening error: create tun: permission denied

含义:TUN 模式要创建虚拟网卡,这一步需要管理员权限。Windows 上用「以管理员身份运行」启动客户端;macOS 与 Linux 按客户端提示完成授权。授权之后仍失败,再检查是否与其他 VPN、加速器类软件冲突——两个虚拟网卡同时接管路由会互相干扰,先退出另一个再试。TUN 模式的完整配置步骤在使用指南里有单独一节,涉及的术语可在名词解释里查。

四、定位问题的固定顺序

把前面的散点收成一条流程。遇到任何异常,按这五步走:

  1. 复现问题的同时盯日志把筛选等级调到 warning 以上,先看有没有 error 行。
  2. 分清阶段启动期报错(配置解析、端口占用、TUN 创建)在打开客户端的瞬间出现;运行期报错(超时、DNS、握手失败)在访问网页时才出现。
  3. 启动期按文本逐字处理报错指哪一行就查哪一行,不要凭印象猜。
  4. 运行期先分节点与本地做延迟测试区分节点与本地网络,再用 match ... using ... 核对规则命中是否符合预期——国内站点被送进节点,多半是规则或 GeoIP 数据的问题,与节点无关。
  5. 信息不够再开 debug现有等级看不出原因时,临时切到 debug 复现一次,拿到细节后调回 info。

原因:日志按时间排列,而故障有明确的阶段属性。先定阶段、再查文本,比在几千行滚动日志里捞关键词快得多。

五、debug 级别的用法与分寸

做法:在日志页把等级切到 debug,或在配置里写 log-level: debug 后重载内核,然后完整复现一次问题,截取从操作开始到报错出现之间的段落。分寸有三点:

  • debug 会打印每条连接的匹配细节,滚动极快,长期开着会拖慢界面、写大日志文件;
  • 日志里含有你访问过的域名,截图发到群里或论坛求助之前,先把敏感域名遮住;
  • 问题解决后调回 info,让日志保持「平时安静、有事发声」,下一次排查才有可读性。

到这里,读日志这件事就讲完了:入口三个、句式一条、报错五类、流程五步。下次客户端转圈、网页打不开时,先别急着重装——打开日志,从最近的一行 error 看起。

下载 Clash 客户端

日志确认是客户端本身的问题时,装一个当前仍在维护的客户端往往最省时间。下载页收录 Windows、macOS、Android 等平台的 Clash 客户端,首次安装与配置步骤见使用指南。

下载Clash全平台客户端