日志断言的正则写的是 elapsed=12ms,实际输出 elapsed=12.345ms,二十次里挂十九次。偶尔一次整数毫秒才通过。日志里能对上时间点,这种反而好排。
日志里的耗时带了三位小数,正则按整数写的,点号又没转义。匹配器只找子串,位数一变就落空。这一点先确认清楚,后面就不用反复试。
Pattern p = Pattern.compile("elapsed=\\d+(\\.\\d+)?ms");
assertTrue(p.matcher(log).find());
这次卡住的地方就在「日志正则断言」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
处理上按这个顺序:正则改成 \d+(\.\d+)?ms 明确可选小数;点号统一转义 避免匹配任意字符;断言前打印日志片段 确认实际格式;格式本身不稳就改输出 统一保留两位。
结果对不对很好判断,连续跑二十次全部匹配 日志里出现 0.8ms 这种值也能过。
