From 46a0ade8ba0fbdd8c17eb0c710da13a8ade781b8 Mon Sep 17 00:00:00 2001 From: Wang Defa <2-wangdefa@users.noreply.gitlab.bcde.io> Date: Thu, 25 Dec 2025 16:34:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E7=BA=A7=E5=88=AB=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E8=BE=93=E5=87=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现 logging.level 配置项支持(DEBUG/INFO/WARN/ERROR) - 修复日志文件中 ANSI 颜色代码显示问题 - 修复 install.sh 中 show_info() 函数颜色显示 - 日志输出现在会根据配置的级别进行过滤 --- bin/backup.sh | 35 +++++++++++++++- install.sh | 114 ++++++++++++++++++++++++-------------------------- 2 files changed, 89 insertions(+), 60 deletions(-) diff --git a/bin/backup.sh b/bin/backup.sh index eda767b..b1634af 100755 --- a/bin/backup.sh +++ b/bin/backup.sh @@ -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}" diff --git a/install.sh b/install.sh index 549e5c7..aba96d8 100755 --- a/install.sh +++ b/install.sh @@ -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