要保存最小必要日志方便后续对比,核心是让 log-level 只留下对比所需的那一类内核输出,并固定输出位置与复现步骤。官方说明:Clash 内核日志按级别输出,且仅在控制台和控制页面出现。级别越宽,后续对比时噪音越大;级别过窄或静默,则对比没有材料。
适用条件与“最小必要”的判断依据
适用:你需要两份可并排对照的记录(例如改配置前后、改 mode 前后),并且只关心错误是否出现、出现的是无法使用还是不影响运行。不适用:把 debug 全量留下来“以免漏掉”,或把 profile 里 store-selected、store-fake-ip 等缓存项误当成日志保存手段——那些项分别用于策略组选择和 fakeip 映射,不是日志级别。
官方级别就是取舍标准:
- 对比“是否已经无法使用”:
error即为最小必要,只含发生错误至无法使用的日志。 - 对比“是否有出错但内核仍能运行”:
warning(其中已包含 error)。 info额外输出一般运行内容,通常超出“最小”。debug尽可能输出所有信息,不适合作为对比底稿。silent不输出,无法对比。
判断是否“必要”:若某行在官方定义里属于一般运行,而你的对比问题是故障是否仍在,则该行不是必要日志,保存它会干扰对照。
保存最小集合的操作步骤
第一步,写明本次对比要回答的唯一问题(例如:同一操作是否仍出现无法使用的错误)。据此选择 log-level: error 或 warning,不要为了保险改成 debug。
第二步,保持其他全局项在两次对比之间不变(除非对比目标就是该项)。与日志无关但容易造成环境差异的,如 mode(rule/global/direct)、ipv6、tcp-concurrent 等,应在记录里注明当时取值,否则两份最小日志无法解释差异来源。
第三步,每次只执行同一组操作,从控制台和控制页面收集该次时间窗内的输出。保存内容限于当前级别下实际出现的行,以及操作时刻、当时的 log-level。不要手工补写未出现的行,也不要混入其他程序的输出。
第四步,对比时先看级别是否一致:一份是 error、另一份是 info,不能直接比行数。只比较同一级别下、同一操作时间窗里是否出现同类错误。warning 与 error 的差异应解释为“是否包含不影响运行的错误”,而不是效果好坏。
保存失败或对比无效时的下一步
保存结果是空的:确认不是 silent,并同时从控制台和控制页面收集。若 error 为空而问题仍在,先不要升到 debug;可改用 warning 看是否只有不影响运行的错误。两者皆空,说明按官方级别没有错误类输出,应停止堆日志,改为核对该次操作是否进入内核、模式是否为 direct 等。
保存结果仍然太多:说明级别仍偏 info 或 debug,或时间窗里混入了多次无关操作。改回 error,单次操作、缩短窗口后再存一份。不要用“再开更大级别”来补最小集合。
两份最小日志对不上:检查两次的 log-level 是否相同,以及 mode、tcp-concurrent、ipv6 等是否被改过。级别不同时,先统一为 error 各做一次,再对比是否出现“无法使用”类日志。