automa/minecraft/scripts/automatic/logger.sh

167 lines
4.5 KiB
Bash
Executable file

#!/bin/bash
LOG_FILE="./logs/mod-install-log.txt"
mkdir -p "$(dirname "$LOG_FILE")"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 初始化日志文件
init_log() {
echo "==================================================" >"$LOG_FILE"
echo "Minecraft Mod 安装日志" >>"$LOG_FILE"
echo "开始时间: $(date)" >>"$LOG_FILE"
echo "==================================================" >>"$LOG_FILE"
echo "" >>"$LOG_FILE"
}
# 记录系统信息
log_system_info() {
{
echo "=== 系统信息 ==="
echo "主机名: $(hostname)"
echo "操作系统: $(uname -s) $(uname -r)"
echo "架构: $(uname -m)"
# CPU 信息
if command -v nproc >/dev/null; then
echo "CPU 核心数: $(nproc)"
fi
if command -v lscpu >/dev/null; then
echo "CPU 型号: $(lscpu | grep "Model name" | cut -d: -f2 | xargs)"
fi
# 内存信息
if command -v free >/dev/null; then
echo "内存总量: $(free -h | grep Mem: | awk '{print $2}')"
echo "可用内存: $(free -h | grep Mem: | awk '{print $7}')"
fi
# 磁盘信息
echo "磁盘使用:"
df -h . | tail -1 | awk '{print " 总量: " $2 ", 可用: " $4 ", 使用率: " $5}'
# 网络信息
echo "公网 IP: $(curl -s ifconfig.me 2>/dev/null || echo "无法获取")"
echo ""
} >>"$LOG_FILE"
}
# 记录命令开始
log_start() {
local command_name="$1"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
{
echo "╔═══════════════════════════════════════════════"
echo "║ 命令: $command_name"
echo "║ 开始时间: $timestamp"
echo "║ 工作目录: $(pwd)"
echo "║ 用户: $(whoami)"
echo "╚═══════════════════════════════════════════════"
echo ""
} >>"$LOG_FILE"
}
# 记录命令结束
log_end() {
local exit_code="$1"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
local duration="${2:-0}"
{
echo ""
echo "╔═══════════════════════════════════════════════"
echo "║ 结束时间: $timestamp"
if [[ -n "$duration" && "$duration" != "0" ]]; then
echo "║ 执行时长: ${duration}"
fi
echo "║ 退出代码: $exit_code"
echo "║ 状态: $([ $exit_code -eq 0 ] && echo "成功" || echo "失败")"
echo "╚═══════════════════════════════════════════════"
echo ""
echo ""
} >>"$LOG_FILE"
}
# 记录信息(同时输出到屏幕和日志)
log_info() {
local message="$1"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo -e "${BLUE}[INFO]${NC} $message"
echo "[$timestamp] [INFO] $message" >>"$LOG_FILE"
}
# 记录成功
log_success() {
local message="$1"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo -e "${GREEN}[SUCCESS]${NC} $message"
echo "[$timestamp] [SUCCESS] $message" >>"$LOG_FILE"
}
# 记录警告
log_warning() {
local message="$1"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo -e "${YELLOW}[WARNING]${NC} $message"
echo "[$timestamp] [WARNING] $message" >>"$LOG_FILE"
}
# 记录错误
log_error() {
local message="$1"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
echo -e "${RED}[ERROR]${NC} $message"
echo "[$timestamp] [ERROR] $message" >>"$LOG_FILE"
}
# 记录命令输出
log_command() {
local command="$1"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
{
echo "[$timestamp] [COMMAND] 执行: $command"
echo "[$timestamp] [OUTPUT]"
} >>"$LOG_FILE"
# 执行命令并捕获输出
eval "$command" 2>&1 | while IFS= read -r line; do
echo "[$timestamp] [OUTPUT] $line" >>"$LOG_FILE"
echo "$line" # 同时输出到屏幕
done
local exit_code=${PIPESTATUS[0]}
echo "[$timestamp] [COMMAND] 退出代码: $exit_code" >>"$LOG_FILE"
return $exit_code
}
# 记录分隔线
log_separator() {
echo "--------------------------------------------------" >>"$LOG_FILE"
}
# 显示日志位置
show_log_location() {
log_info "详细日志已保存到: $LOG_FILE"
log_info "查看日志: tail -f $LOG_FILE"
}
# 主函数
main() {
if [[ "$1" == "init" ]]; then
init_log
log_system_info
fi
}
# 如果直接执行此脚本,则初始化
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi