Linux 日志彩色打印:Shell 和 C 语言实现指南
简介
Linux 日志全是黑白,找报错超费眼!用 Shell 和 C 实现彩色打印,一眼揪 bug 少加班。
这其实是 Linux 通用 ANSI 转义码,简单给文字换色,记好万能公式就能用。
ANSI 彩色原理
flowchart LR
A[程序] --> B[printf/echo]
B --> C[插入转义码]
C --> D[终端解析]
D --> E[显示彩色文字]
核心流程:程序输出 → 插入 \033[...m → 终端识别 → 渲染彩色文字。
万能染色公式
\033[属性;颜色m 要打印的内容 \033[0m
重点碎碎念:结尾一定要加 \033[0m,千万别漏!
flowchart TD
A[开始输出] --> B[插入 ESC31m 开启红色]
B --> C[输出红色文字]
C --> D{是否重置颜色}
D -->|是 加ESC0m| E[恢复正常颜色]
D -->|否 不加| F[整个终端变成红色]
F --> G[后续所有输出都是红色]
不然整个终端都会被染成固定颜色,后续输啥都是这个色,想改回来超麻烦,踩过坑的都懂。
Shell 脚本用法
echo -e "\033[属性;颜色m 要打印的内容 \033[0m"
关键点:echo 后面必须加 -e 参数,不然染色暗号会当成普通文字原样打出来。
日志级别配色(行业通用)
| 级别 | 颜色 | 效果 |
|---|---|---|
| 报错 | 红色(31) | 出问题一眼锁定,不用瞎翻乱找 |
| 成功 | 绿色(32) | 运行顺利,看着就舒心,下班信号 |
| 警告 | 黄色(33) | 小问题提前留意,避免后续踩大坑 |
| 提示 | 蓝色(34) | 日常运行信息,不扎眼也不突兀 |
颜色速查小抄
文字属性
| 属性值 | 效果 |
|---|---|
| 0 | 恢复默认 |
| 1 | 高亮加粗(更显眼) |
文字颜色
| 颜色值 | 颜色 |
|---|---|
| 30 | 黑色 |
| 31 | 红色 |
| 32 | 绿色 |
| 33 | 黄色 |
| 34 | 蓝色 |
| 35 | 紫色 |
| 36 | 青色 |
| 37 | 白色 |
高亮组合示例
1;31 = 高亮红色,报错用这个更扎眼,扫一眼就能看见。
来自 linuxros.cn · linuxROS
Shell 脚本示例
#!/bin/bash
# 彩色日志函数
log_error() { echo -e "\033[1;31m[ERROR]\033[0m $1"; }
log_success() { echo -e "\033[1;32m[SUCCESS]\033[0m $1"; }
log_warn() { echo -e "\033[1;33m[WARN]\033[0m $1"; }
log_info() { echo -e "\033[1;34m[INFO]\033[0m $1"; }
# 使用示例
log_error "配置文件读取失败"
log_success "服务启动成功"
log_warn "内存使用率超过70%"
log_info "系统正常运行中"
C 语言实现
写 Linux C 程序、做嵌入式开发的朋友,染色原理和 Shell 一样,不需要额外头文件或第三方库。
简单用法
printf("\033[1;31m[ERROR]\033[0m 文件打开失败\n");
printf("\033[1;32m[SUCCESS]\033[0m 连接已建立\n");
printf("\033[1;33m[WARN]\033[0m 内存使用率高\n");
printf("\033[1;34m[INFO]\033[0m 任务完成\n");
推荐用法:宏封装
项目里更推荐用宏封装,代码看着干净整洁,后续改颜色只改宏就行。
#include <stdio.h>
#define COLOR_ERROR "\033[1;31m"
#define COLOR_SUCCESS "\033[1;32m"
#define COLOR_WARN "\033[1;33m"
#define COLOR_INFO "\033[1;34m"
#define COLOR_RESET "\033[0m"
#define log_error(fmt, ...) printf(COLOR_ERROR "[ERROR] " fmt "\n" COLOR_RESET, ##__VA_ARGS__)
#define log_success(fmt, ...) printf(COLOR_SUCCESS "[SUCCESS] " fmt "\n" COLOR_RESET, ##__VA_ARGS__)
#define log_warn(fmt, ...) printf(COLOR_WARN "[WARN] " fmt "\n" COLOR_RESET, ##__VA_ARGS__)
#define log_info(fmt, ...) printf(COLOR_INFO "[INFO] " fmt "\n" COLOR_RESET, ##__VA_ARGS__)
int main() {
log_error("配置文件读取失败: %s", "/etc/app.conf");
log_success("服务启动成功,监听端口: %d", 8080);
log_warn("内存使用率: %d%%", 75);
log_info("系统正常运行,当前时间: %s", "2026-05-04");
return 0;
}
新手避坑指南
这几点千万别踩雷,照着做就完全没事:
1. Shell 的 echo 必须加 -e
# 错误
echo "\033[31m红色文字\033[0m"
# 正确
echo -e "\033[31m红色文字\033[0m"
2. 结尾必须加 \033[0m
忘记加 \033[0m 重置颜色,整个终端都会变色,后续所有输出都带着这个颜色。
3. 日志存文件不要加颜色
彩色 ANSI 码写入文件会变成乱码。彩色日志只适合终端调试,正式文件用黑白就好。
总结
真的别再用枯燥的黑白日志折磨自己了,就一行代码的小事。
调试的时候,报错、提示、成功分得明明白白,再也不用盯着密密麻麻的文字抠细节。省下找 bug 的时间,准点下班、安心摸鱼。
赶紧用起来吧!