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' YELLOW='\033[1;33m'
NC='\033[0m' # No Color 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 message="$@"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S') 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避免干扰函数返回值 # 输出到 stderr避免干扰函数返回值
echo -e "[${timestamp}] [${level}] ${message}" >&2 echo -e "[${timestamp}] [${level}] ${message}" >&2
# 如果配置了日志文件,同时写入文件 # 如果配置了日志文件,同时写入文件
if [[ -n "${LOG_FILE}" ]] && [[ "${LOGGING_ENABLED}" == "true" ]]; then 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 fi
} }
@@ -138,6 +159,18 @@ load_config() {
# 读取日志配置 # 读取日志配置
LOGGING_ENABLED=$(yq eval '.logging.enabled' "${CONFIG_FILE}") LOGGING_ENABLED=$(yq eval '.logging.enabled' "${CONFIG_FILE}")
LOG_FILE=$(yq eval '.logging.log_file' "${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}" mkdir -p "${OUTPUT_DIR}"

View File

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