Clash 要把一次失败变成以后还能查的记录,靠的不是文档未记载的独立功能名称,而是把全局配置里已经写明的日志级别、运行模式和相关开关,与当时观察到的现象写在同一条记录里。这样得到的是自己的故障记录索引:以后看到类似输出,能先对照级别和上下文。适用条件是可以编辑配置文件的全局段,并且能够查看控制台或控制页面;官方说明日志仅在这两处输出。
按日志级别划分收录范围
log-level 是内核输出日志的等级。五个取值应直接成为索引的第一列。silent 表示静默、不输出,不能支撑任何故障记录。error 仅输出发生错误至无法使用的日志,索引只应留下已经无法按预期工作的条目。warning 输出发生错误但不影响运行的日志,以及 error 级别内容,因此同时包含“仍能运行的出错”和“已经无法使用的出错”。info 再叠加一般运行内容,条目会变多,需要靠时间顺序和关键词二次筛选。debug 尽可能输出运行中所有信息,只适合短窗口采集,不适合作为长期主索引。
判断依据:目标若是停机或完全不可用,使用 error;若还要保留不影响运行的出错,使用 warning;若需要把一般运行过程一并对照,使用 info。示例:
log-level: warning
加载配置后,看控制台或控制页面的输出密度是否与所选级别一致。若级别不是 silent 却完全没有输出,失败时下一步是确认查看位置是否为控制台或控制页面,以及该文件是否确为内核正在使用的配置,而不是去寻找文档没有给出的其他日志路径。
为每条记录标注运行模式
mode 拥有默认值,默认为规则模式。可选值为 rule(规则匹配)、global(全局代理,需要在 GLOBAL 策略组选择代理/策略)、direct(全局直连)。索引的第二列应抄下当时的 mode。判断依据:同一条 error 或 warning,在 direct 下应优先对照入站、本机连通和全局开关;在 global 下还要核对该策略组是否已经选出节点或策略;在 rule 下必须把规则未匹配与节点侧失败分开登记。缺少 mode 的记录,后续无法判断那次失败发生在哪一种流量模型里。
具体操作:把 mode 写成明确值并与日志一起保存。若现象是全部直连或全部走代理,先核对是否写成了 direct 或 global。若 mode 已是 rule 仍异常,再进入开关核对,而不是马上改成 debug 造成记录难以检索。
把会改变表现的开关写入同一条索引
若干全局项会让正常设定看起来像故障,应作为附加字段。ipv6 控制是否允许内核接受 IPv6 流量,可选 true/false,默认为 true;IPv6 相关失败要先看它是否为 false。find-process-mode 可选 always(强制匹配所有进程)、strict(默认,由 Clash 判断是否开启)、off(不匹配进程,推荐在路由器上使用);进程相关输出必须对照此项。keep-alive-interval 与 keep-alive-idle 单位为秒,disable-keep-alive 在 Android 上强制为 true;移动设备空闲断开应先看这三项。allow-lan、bind-address、lan-allowed-ips、lan-disallowed-ips 管理其他设备经代理端口访问,黑名单优先级高于白名单。authentication 作用于 http(s)/socks/mixed 代理的用户验证,skip-auth-prefixes 设置允许跳过验证的 IP 段。secret 是 RESTful API 的访问密钥,与代理端口的 authentication 不是同一件事,索引里应分列。
固定步骤:选定 log-level → 记录 mode → 抄下本节开关的当前值 → 只根据控制台或控制页面实际出现的级别内容补描述。失败时下一步:需要更多细节时,把 log-level 临时改为 debug,问题窗口结束后改回 warning 或 info;若仍无可用记录,回到输出位置、配置是否加载、以及 mode 与开关是否抄错。