You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

过滤特定字符串时ccze日志着色工具无输出,原因何在?

syslog过滤后管道到ccze无输出的原因分析

问题场景

在Ubuntu 22.04系统中,使用bash别名执行以下命令过滤/var/log/syslog的无关日志:

tail -f --lines=200 /var/log/syslog | \
  egrep -v "(named\[.*\]: (REFUSED unexpected RCODE|timed out) resolving)|\[INFO\] (New connection from ::1|Logout.)"

单独执行该命令能正常输出目标内容,但将输出通过管道传给ccze -A时无任何输出。移除排除规则中的REFUSED unexpected RCODE部分后,ccze能正常显示着色日志;若先将过滤结果写入文件再传给ccze也可正常工作。

原因解析

  • 缓冲区模式差异:egrep在输出到终端时采用行缓冲模式,每生成一行输出就立即刷新缓冲区;但当输出目标是管道时,会默认切换为全缓冲模式——只有当缓冲区被填满(通常是4KB或8KB)时才会把数据传给下一个命令。tail -f是持续监控日志新增内容,当保留REFUSED unexpected RCODE规则时,过滤后符合条件的日志输出频率极低,egrep的缓冲区一直攒不够刷新阈值,数据无法传递到ccze,因此看不到输出。
  • 正则规则的间接影响:移除REFUSED unexpected RCODE规则后,被过滤掉的日志量减少,符合条件的输出频率变高,egrep的缓冲区很快被填满并刷新,ccze就能及时接收到数据并显示着色日志。
  • 文件中转的缓冲特性:当把egrep的输出写入文件时,写入操作会触发缓冲区刷新;后续用cat等工具读取文件传给ccze时,这些工具采用行缓冲模式,能及时把数据传递给ccze,因此可以正常工作。

内容的提问来源于stack exchange,提问作者Jens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 05:15:38