先把级别调对
log-level 有五档:silent、error、warning、info、debug。日常挂着建议 warning——真出事才有输出,平时安静。要看每条连接命中哪条规则,临时切到 info。
debug 只在排查具体问题时开,用完就关。它刷得太快,你根本来不及看;更实际的顾虑是它会把你访问的每一个域名都写下来,多数客户端还会同时落到磁盘上的日志文件里。
一行日志里有什么
info 级别下最有价值的是连接行:时间、级别、然后是这次请求的目标(域名或 IP 加端口)、命中的规则类型和内容、以及最终选了哪个出口。三样东西凑齐,「为什么这个站走错了线路」这个问题就是可以直接读出答案的,不用猜。
另一类是内核自己的状态行:加载配置、启动监听、DNS 初始化、TUN 接口创建。这些集中在启动那几秒,之后就不太出现了。
问题一:这个网站走了哪条规则
- 把
log-level切到info,重载配置。 - 清空日志窗口,然后关掉浏览器里其它标签页——不然背景请求会把你要找的那行淹掉。
- 只访问你要查的那个站,回头看新出现的行,找目标域名。
- 读它命中的规则。如果命中的不是你写的那条,说明前面有一条更靠前的规则先匹配上了;规则是从上往下第一条命中就停的。
问题二:客户端起不来
只看最前面十几行,别往下翻。配置解析出错一定发生在加载阶段,而且报错通常带字段名,有时带行号——比如某个 proxy-groups 引用了不存在的节点名,或者某个字段类型不对。找到那行,去配置里对应位置改。
如果最前面几行显示监听失败,那不是配置写错,是端口被占了。这种情况日志会点出具体端口号,换个端口或者找出占用的进程。
问题三:时通时断
这类问题看的不是某一行,是重复出现的模式。找 timeout、EOF、connection reset、i/o timeout 这类字样,然后回答一个问题:它们集中在同一个节点,还是所有节点都有?集中在一个节点,换节点就完事;所有节点都有,问题多半在本地网络或者 DNS,不在代理链路上。
贴日志到论坛或者群里之前,先删掉两样东西:订阅域名(往往带 token),以及你自己访问过的域名列表——那基本等于一份浏览历史。截图比复制文本更容易漏掉边角,最好用文本,删干净了再发。