当前位置: 首页 > news >正文

shell脚本log打印

shell脚本log打印

# 日志文件配置
LOG_FILE="${LOG_FILE:-/var/log/myapp.log}"
# 默认10MB
LOG_MAX_SIZE="${LOG_MAX_SIZE:-10485760}"  
LOG_BACKUP_COUNT="${LOG_BACKUP_COUNT:-5}"# 日志级别定义
LOG_LEVEL_DEBUG=0
LOG_LEVEL_INFO=1
LOG_LEVEL_WARN=2
LOG_LEVEL_ERROR=3# 当前日志级别(默认为DEBUG)
LOG_LEVEL=$LOG_LEVEL_DEBUG# 日志轮转函数
rotate_log() {local log_file="${1:-$LOG_FILE}"# 检查日志文件是否存在if [[ ! -f "$log_file" ]]; thenreturn 0fi# 获取文件大小local file_size=$(stat -c%s "$log_file" 2>/dev/null || echo "0# 如果文件大小超过限制,则进行轮转if [[ $file_size -gt $LOG_MAX_SIZE ]]; thenecho "$(date '+%Y-%m-%d %H:%M:%S') - Starting log rotation for $log_file (size: $file_size)" >> "$log_file"# 删除最旧的备份文件local oldest_backup="${log_file}.${LOG_BACKUP_COUNT}"if [[ -f "$oldest_backup" ]]; thenrm -f "$oldest_backup"fi# 轮转现有备份文件for ((i=LOG_BACKUP_COUNT-1; i>=1; i--)); dolocal current_backup="${log_file}.${i}"local next_backup="${log_file}.$((i+1))"if [[ -f "$current_backup" ]]; thenmv "$current_backup" "$next_backup"fidone# 创建新的备份mv "$log_file" "${log_file}.1"# 创建新的日志文件并添加轮转记录touch "$log_file"chmod 644 "$log_file"echo "$(date '+%Y-%m-%d %H:%M:%S') - Log rotation completed. New log file created." >> "$log_file"return 0fireturn 0
}# 主日志记录函数
log_message() {local level=$1local message=$2local timestamp=$(date '+%Y-%m-%d %H:%M:%S')local level_str=""local color=$NCcase $level in$LOG_LEVEL_DEBUG)level_str="DEBUG"color=$BLUE;;$LOG_LEVEL_INFO)level_str="INFO"color=$GREEN;;$LOG_LEVEL_WARN)level_str="WARN"color=$YELLOW;;$LOG_LEVEL_ERROR)level_str="ERROR"color=$RED;;*)level_str="UNKNOWN";;esac# 检查日志级别是否足够[[ $level -lt $LOG_LEVEL ]] && return 0# 日志轮转检查rotate_log "$LOG_FILE"# 构建日志条目local log_entry="[$timestamp] [$level_str] - $message"# 输出到控制台(带颜色)if [[ -t 1 ]]; thenecho -e "${color}${log_entry}${NC}"elseecho "$log_entry"fi# 输出到文件echo "$log_entry" >> "$LOG_FILE"return 0
}# 便捷函数
log_debug() { log_message $LOG_LEVEL_DEBUG 	"$1"; }
log_info() 	{ log_message $LOG_LEVEL_INFO 	"$1"; }
log_warn() 	{ log_message $LOG_LEVEL_WARN 	"$1"; }
log_error() { log_message $LOG_LEVEL_ERROR 	"$1"; }# 测试函数
test_logging() {echo "=== 开始日志测试 ==="# 测试不同级别的日志log_debug "这是一个调试信息"log_info "这是一个普通信息"log_warn "这是一个警告信息" log_error "这是一个错误信息"# 测试环境变量设置echo "当前日志级别: $LOG_LEVEL"echo "日志文件: $LOG_FILE"echo "=== 日志测试完成 ==="
}# 如果直接运行脚本则执行测试
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; thentest_logging
fi    
http://www.dtcms.com/a/511308.html

相关文章:

  • 反激电源伏秒平衡与占空比设计逻辑全解析
  • Linux网络编程(下)
  • Le Cerfav:使用MANUS手套和动作捕捉技术保存传统玻璃制作方法
  • Lua脚本详解
  • 【Block总结】ESSamp,下采样|保留原始图像信息|即插即用
  • 政务服务中心 网站建设html代码模板免费
  • Java日志收集技术
  • Gartner发布2026年十大战略技术趋势
  • 2025无人机在农业生态中的应用实践
  • 在 UOS(统信操作系统,基于 Debian/Ubuntu 体系)上编译 OpenCV 4.10.0
  • High-quality Surface Reconstruction using Gaussian Surfels 论文阅读
  • 百度地图多维检索:自然语言理解的深度搜索实践
  • 软件下载网站地址网站建设好了怎么进行推广
  • 牛客:NC16783拼数
  • UV技术:高效杀菌与精准固化的未来之光
  • PB级数据洪流下的抉择:从大数据架构师视角,深度解析时序数据库选型与性能优化(聚焦Apache IoTDB)
  • 时序数据库TDengine用法
  • 重庆市建设网站公司经济师考试时间2023报名时间
  • 第3章,[标签 Win32] :窗口类06,实例句柄与图标光标
  • 带你了解STM32:PWR电源控制
  • React Hooks完全指南
  • 多线程之ThreadLocal
  • 如何修改root密码
  • (三)React技术核心思想——组件化编程
  • 国外唯美flash个人网站欣赏建设网银
  • 【NVIDIA-H200-3】3节点all-reduce-三节点扩展的性能边界:NVIDIA H200 24 卡集群 all-reduce 通信效率深度剖析
  • D026 vue3+django 论文知识图谱推荐可视化系统 | vue3+vite前端|neo4j 图数据库
  • 桃浦做网站常德经开区网站官网
  • ODOO数据文件(XML、CSV、SQL)是如何转换并加载到 Odoo 数据库
  • ArcGIS JSAPI 学习教程 - 要素图层(FeatureLayer)分类、分组设置可视化样式(ClassBreaksRenderer)