feat: 实现日志级别功能并修复日志输出问题

- 实现 logging.level 配置项支持(DEBUG/INFO/WARN/ERROR)
- 修复日志文件中 ANSI 颜色代码显示问题
- 修复 install.sh 中 show_info() 函数颜色显示
- 日志输出现在会根据配置的级别进行过滤
This commit is contained in:
Wang Defa
2025-12-25 16:34:30 +08:00
parent 7d42577fb2
commit 46a0ade8ba
2 changed files with 89 additions and 60 deletions

View File

@@ -23,6 +23,17 @@ GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志级别映射
declare -A LOG_LEVEL_MAP=(
["DEBUG"]=0
["INFO"]=1
["WARN"]=2
["ERROR"]=3
)
# 当前日志级别(默认 INFO
CURRENT_LOG_LEVEL=1
###############################################################################
# 日志函数
###############################################################################
@@ -33,12 +44,22 @@ log() {
local message="$@"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
# 获取当前日志级别的数值
local level_value=${LOG_LEVEL_MAP[$level]:-1}
# 如果日志级别低于配置的级别,则不输出
if [[ $level_value -lt $CURRENT_LOG_LEVEL ]]; then
return 0
fi
# 输出到 stderr避免干扰函数返回值
echo -e "[${timestamp}] [${level}] ${message}" >&2
# 如果配置了日志文件,同时写入文件
if [[ -n "${LOG_FILE}" ]] && [[ "${LOGGING_ENABLED}" == "true" ]]; then
echo "[${timestamp}] [${level}] ${message}" >> "${LOG_FILE}"
# 移除 ANSI 颜色代码后写入文件
local clean_message=$(echo -e "${message}" | sed 's/\x1b\[[0-9;]*m//g')
echo "[${timestamp}] [${level}] ${clean_message}" >> "${LOG_FILE}"
fi
}
@@ -138,6 +159,18 @@ load_config() {
# 读取日志配置
LOGGING_ENABLED=$(yq eval '.logging.enabled' "${CONFIG_FILE}")
LOG_FILE=$(yq eval '.logging.log_file' "${CONFIG_FILE}")
LOG_LEVEL=$(yq eval '.logging.level' "${CONFIG_FILE}")
# 设置日志级别
if [[ -n "${LOG_LEVEL}" ]] && [[ "${LOG_LEVEL}" != "null" ]]; then
# 转换为大写
LOG_LEVEL=$(echo "${LOG_LEVEL}" | tr '[:lower:]' '[:upper:]')
# 设置当前日志级别
CURRENT_LOG_LEVEL=${LOG_LEVEL_MAP[$LOG_LEVEL]:-1}
log_info "日志级别设置为: ${LOG_LEVEL}"
else
log_info "使用默认日志级别: INFO"
fi
# 创建输出目录
mkdir -p "${OUTPUT_DIR}"

View File

@@ -343,53 +343,51 @@ test_backup() {
###############################################################################
show_info() {
cat << EOF
${GREEN}╔═══════════════════════════════════════════════════════════════╗
║ Docker Backup 安装完成! ║
╚═══════════════════════════════════════════════════════════════╝${NC}
${BLUE}安装信息:${NC}
- 备份脚本: ${BIN_DIR}/docker-backup
- 清理脚本: ${BIN_DIR}/docker-backup-cleanup
- 配置文件: ${CONFIG_DIR}/config.yml
- 服务名称: ${SERVICE_NAME}
${BLUE}常用命令:${NC}
# 查看定时任务状态
systemctl status ${SERVICE_NAME}.timer
# 查看定时计划
systemctl list-timers ${SERVICE_NAME}.timer
# 手动执行备份
docker-backup
# 列出所有备份
docker-backup-cleanup --list
# 清理旧备份
docker-backup-cleanup --auto
# 停止定时任务
systemctl stop ${SERVICE_NAME}.timer
# 禁用定时任务
systemctl disable ${SERVICE_NAME}.timer
${YELLOW}重要提示:${NC}
1. 请编辑配置文件以适应您的环境:
vi ${CONFIG_DIR}/config.yml
2. 修改配置后无需重启服务,下次执行时自动生效
3. 查看下次执行时间:
systemctl list-timers | grep ${SERVICE_NAME}
4. 查看备份日志:
journalctl -u ${SERVICE_NAME}.service -f
EOF
echo ""
echo -e "${GREEN}╔═══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ Docker Backup 安装完成! ║${NC}"
echo -e "${GREEN}╚═══════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo -e "${BLUE}安装信息:${NC}"
echo " - 备份脚本: ${BIN_DIR}/docker-backup"
echo " - 清理脚本: ${BIN_DIR}/docker-backup-cleanup"
echo " - 配置文件: ${CONFIG_DIR}/config.yml"
echo " - 服务名称: ${SERVICE_NAME}"
echo ""
echo -e "${BLUE}常用命令:${NC}"
echo " # 查看定时任务状态"
echo " systemctl status ${SERVICE_NAME}.timer"
echo ""
echo " # 查看定时计划"
echo " systemctl list-timers ${SERVICE_NAME}.timer"
echo ""
echo " # 手动执行备份"
echo " docker-backup"
echo ""
echo " # 列出所有备份"
echo " docker-backup-cleanup --list"
echo ""
echo " # 清理旧备份"
echo " docker-backup-cleanup --auto"
echo ""
echo " # 停止定时任务"
echo " systemctl stop ${SERVICE_NAME}.timer"
echo ""
echo " # 禁用定时任务"
echo " systemctl disable ${SERVICE_NAME}.timer"
echo ""
echo -e "${YELLOW}重要提示:${NC}"
echo " 1. 请编辑配置文件以适应您的环境:"
echo " vi ${CONFIG_DIR}/config.yml"
echo ""
echo " 2. 修改配置后无需重启服务,下次执行时自动生效"
echo ""
echo " 3. 查看下次执行时间:"
echo " systemctl list-timers | grep ${SERVICE_NAME}"
echo ""
echo " 4. 查看备份日志:"
echo " journalctl -u ${SERVICE_NAME}.service -f"
echo ""
}
###############################################################################
@@ -509,18 +507,16 @@ main() {
done
# 显示欢迎信息
cat << EOF
${GREEN}╔═══════════════════════════════════════════════════════════════╗
║ 欢迎使用 Docker Backup 安装程序 ║
╚═══════════════════════════════════════════════════════════════╝${NC}
安装配置:
- 服务名称: ${SERVICE_NAME}
- 定时计划: ${SCHEDULE}
- 配置目录: ${CONFIG_DIR}
- 脚本目录: ${BIN_DIR}
EOF
echo -e "${GREEN}╔═══════════════════════════════════════════════════════════════╗${NC}"
echo -e "${GREEN}║ 欢迎使用 Docker Backup 安装程序 ║${NC}"
echo -e "${GREEN}╚═══════════════════════════════════════════════════════════════╝${NC}"
echo ""
echo "安装配置:"
echo " - 服务名称: ${SERVICE_NAME}"
echo " - 定时计划: ${SCHEDULE}"
echo " - 配置目录: ${CONFIG_DIR}"
echo " - 脚本目录: ${BIN_DIR}"
echo ""
# 检查 root 权限
check_root