linux运维脚本输出彩色日志的核心是用ansi转义序列(如\033[1;32m)将info、warn、error分别映射为绿、黄、红,并封装log_info()等函数统一调用,通过[-t 1]检测终端自动降级,再辅以时间戳和分级输出提升可维护性。

Linux运维脚本中输出彩色日志,核心是利用ANSI转义序列控制终端颜色,再结合日志级别(如 INFO、WARN、ERROR)做语义区分。关键不是“加颜色”,而是让颜色与级别形成稳定映射,便于快速识别,同时兼顾可读性和兼容性。
基础颜色编码:用转义序列控制文字样式
终端支持的ANSI颜色通过\033[开头的控制序列实现,格式为:\033[显示属性;前景色;背景色m。常用级别对应建议如下:
- INFO(绿色):\033[1;32m(高亮+绿色)
- WARN(黄色):\033[1;33m(高亮+黄色)
- ERROR(红色):\033[1;31m(高亮+红色)
- RESET(复位):\033[0m(必须结尾,避免后续输出染色)
封装函数:让调用简洁且不易出错
在脚本开头定义日志函数,避免重复写转义码。例如:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
log_info() { echo -e "\033[1;32m[INFO] $*\033[0m"; }
log_warn() { echo -e "\033[1;33m[WARN] $*\033[0m"; }
log_error() { echo -e "\033[1;31m[ERROR] $*\033[0m"; }
调用时直接:log_warn "磁盘使用率超85%",清晰、一致、易维护。
适配环境:自动降级处理无色终端
某些场景(如定时任务、重定向到文件、非交互式SSH)不支持颜色。可检测$TERM或-t 1判断是否为真实终端:
if [ -t 1 ]; then
LOG_COLOR=1
else
LOG_COLOR=0
fi
log_info() {
if [ "$LOG_COLOR" = 1 ]; then
echo -e "\033[1;32m[INFO] $*\033[0m"
else
echo "[INFO] $*"
fi
}
进阶建议:统一前缀 + 时间戳 + 可选输出目标
生产脚本中,推荐增强可追溯性:
- 每条日志加$(date '+%Y-%m-%d %H:%M:%S')时间戳
- INFO/WARN/ERROR统一用方括号包裹,对齐视觉
- 支持将ERROR日志额外写入/var/log/myscript.err便于监控抓取
- 避免在管道或重定向中意外输出控制字符(如| grep前先去色)










