在 Ubuntu 的 Shell 脚本中记录日志可以通过以下两种常见方式实现:
方法 1:简单重定向输出
直接将脚本的输出(包括 stdout 和 stderr)重定向到日志文件:
#!/bin/bash
# 定义日志文件路径
LOG_FILE="/path/to/your/logfile.log"
# 将标准输出和错误输出重定向到日志文件
exec > "$LOG_FILE" 2>&1
# 你的脚本逻辑
echo "=== 脚本开始执行 ==="
date
# ... 其他操作 ...
echo "=== 脚本执行结束 ==="
方法 2:带时间戳的日志函数
通过自定义函数实现更结构化的日志记录(推荐):
#!/bin/bash
# 定义日志文件路径(按日期生成)
LOG_FILE="/var/log/myscript_$(date +%Y%m%d).log"
# 定义日志函数
log() {
local level="$1"
local message="$2"
local timestamp=$(date +"%Y-%m-%d %T")
echo "[$timestamp] [$level] $message" | tee -a "$LOG_FILE"
}
# 使用示例
log "INFO" "脚本开始执行"
log "DEBUG" "当前用户: $(whoami)"
# 你的脚本逻辑
if some_command; then
log "SUCCESS" "命令执行成功"
else
log "ERROR" "命令执行失败"
exit 1
fi
log "INFO" "脚本执行结束"
关键点说明
- 日志文件路径
- 建议将日志放在
/var/log/目录(需sudo权限)或用户目录下(如~/logs/)。 - 使用
$(date +%Y%m%d)按日期生成日志文件,避免单个文件过大。
- 建议将日志放在
- 日志内容格式
- 包含时间戳(
date +"%Y-%m-%d %T")、日志级别(INFO/ERROR等)和具体消息。 tee -a命令会同时将日志输出到控制台和文件。
- 包含时间戳(
- 权限问题
- 如果日志目录需要权限,运行脚本前执行:
sudo mkdir -p /var/log/myscript sudo touch /var/log/myscript/logfile.log sudo chmod 644 /var/log/myscript/logfile.log
- 如果日志目录需要权限,运行脚本前执行:
- 实时查看日志
tail -f /var/log/myscript_20231001.log # 替换为你的日志文件名
扩展功能
-
日志轮转(Log Rotation)
使用logrotate工具自动管理日志文件大小和历史:# 创建配置文件 /etc/logrotate.d/myscript /var/log/myscript/*.log { daily rotate 7 compress missingok notifempty } -
按级别过滤日志
在函数中增加逻辑,例如只记录 ERROR 级别到单独文件:if [ "$level" = "ERROR" ]; then echo "[$timestamp] [$level] $message" >> "$ERROR_LOG_FILE" fi
根据需求选择合适的方式即可!

被折叠的 条评论
为什么被折叠?



