Shell工程化:日志系统与日志函数

本文最后更新于 2026年7月8日 下午

Shell工程化:日志系统与日志函数

一、为什么要建立日志系统

在简单脚本中,使用 echo 输出即可满足需求;但随着脚本规模扩大,仅依靠普通输出将难以定位问题、追踪执行过程和排查故障。

工程化脚本应具备以下能力:

  • 记录执行过程
  • 快速定位异常
  • 保留历史执行记录
  • 便于维护与调试

因此,建议统一使用日志函数代替直接调用 echo

二、日志的基本规范

一条规范的日志通常应包含以下信息:

字段 说明
时间 日志产生时间
日志级别 INFO、WARN、ERROR 等
日志内容 当前执行的信息

推荐格式:

1
[2026-07-07 14:30:10] [INFO] 开始安装 nginx

获取标准时间格式:

1
date "+%F %T"

输出示例:

1
2026-07-07 14:30:10

三、封装日志函数

建议将日志输出统一封装,避免重复代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

log_info() {
echo "[$(date '+%F %T')] [INFO] $1"
}


log_warn() {
echo "[$(date '+%F %T')] [WARN] $1"
}


log_error() {
echo "[$(date '+%F %T')] [ERROR] $1"
}


log_success() {
echo "[$(date '+%F %T')] [SUCCESS] $1"
}

调用示例:

1
2
3
log_info "开始安装"
log_success "安装完成"
log_error "安装失败"

四、彩色日志输出

Linux 终端支持 ANSI 转义字符,可提高日志可读性。

常用颜色:

颜色 ANSI编码
红色 31
绿色 32
黄色 33
蓝色 34
青色 36

示例:

1
2
3
log_error() {
echo -e "\033[31m[$(date '+%F %T')] [ERROR] $1\033[0m"
}

恢复默认颜色:

1
\033[0m

五、日志写入文件

生产环境不仅需要终端输出,还应将日志保存到文件,方便后续审计与排查。

初始化日志目录:

1
2
3
4
LOG_DIR="./logs"
LOG_FILE="$LOG_DIR/install.log"

mkdir -p "$LOG_DIR"

推荐使用追加写入:

1
echo "$msg" >> "$LOG_FILE"

避免使用:

1
echo "$msg" > "$LOG_FILE"

因为 > 会覆盖已有日志。

六、同时输出到终端和日志文件

可统一封装日志函数,实现双重输出。

1
2
3
4
5
6
log_info() {
local msg="[$(date '+%F %T')] [INFO] $1"

echo "$msg"
echo "$msg" >> "$LOG_FILE"
}

这种方式既方便实时查看,又能长期保存日志,是 Shell 工程化项目中的常见实践。

七、最佳实践

在大型 Shell 项目中,建议遵循以下规范:

  • 所有输出统一使用日志函数。
  • 日志包含时间、级别和内容。
  • 日志目录自动创建。
  • 日志文件统一管理,避免分散存放。
  • 根据场景使用不同日志级别,提高可维护性。
  • 重要脚本建议同时输出到终端和日志文件,便于排障与审计。

Shell工程化:日志系统与日志函数
http://example.com/e3bb6ee7.html
作者
SHAO
发布于
2026年7月7日
许可协议