1. Shell脚本日志记录的核心价值
在生产环境中,Shell脚本的日志记录质量直接决定了运维效率。我曾经历过一次惨痛的教训:某凌晨3点自动化备份脚本失败,由于缺乏有效日志,团队花了6小时才定位到是一个权限配置问题。自此我系统性地重构了所有脚本的日志模块,总结出一套可复用的最佳实践。
良好的日志系统需要实现三个核心目标:
- 问题可追溯:能清晰还原脚本执行路径和关键变量状态
- 错误可诊断:包含足够的上下文信息帮助快速定位根因
- 行为可审计:满足合规要求,记录关键操作的执行者和时间戳
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础日志框架设计
2.1 日志分级策略
采用Syslog标准的8级日志分类(从0-7),但实践中可简化为4个实用级别:
bash复制LOG_LEVEL_DEBUG=3
LOG_LEVEL_INFO=2
LOG_LEVEL_WARNING=1
LOG_LEVEL_ERROR=0
在脚本开头通过全局变量控制输出级别:
bash复制CURRENT_LOG_LEVEL=$LOG_LEVEL_INFO # 生产环境通常设为INFO
2.2 日志函数封装
基础日志函数应包含以下要素:
bash复制log() {
local level=$1
local message=$2
local timestamp=$(date "+%Y-%m-%d %H:%M:%S.%3N")
[ $level -ge $CURRENT_LOG_LEVEL ] && \
echo "[${timestamp}] [${HOSTNAME}] [$$] [$(whoami)] [${level}] ${message}" >> ${LOG_FILE}
}
关键字段说明:
- %3N:精确到毫秒的时间戳,对于并发脚本排查至关重要
- $$:当前进程ID,区分并行执行的脚本实例
- whoami:执行用户,满足审计要求
3. 高级日志技巧
3.1 动态日志路径管理
为避免日志文件膨胀,建议采用按天滚动策略:
bash复制LOG_DIR="/var/log/$(basename $0 .sh)"
mkdir -p ${LOG_DIR}
LOG_FILE="${LO
