Files
quectel-rgmii-toolkit/ipk-source/sdxpinn-quecmanager-beta/root/www/cgi-bin/services/quecmanager_logger.sh
2025-08-26 21:35:18 -04:00

120 lines
3.0 KiB
Bash
Executable File

#!/bin/sh
# QuecManager Centralized Logging Helper
# OpenWrt/BusyBox compatible logging system
# Usage: source this file and use qm_log function
set -e
# Base log directory
QM_LOG_BASE="/tmp/quecmanager/logs"
# Log categories
QM_LOG_DAEMONS="$QM_LOG_BASE/daemons"
QM_LOG_SERVICES="$QM_LOG_BASE/services"
QM_LOG_SETTINGS="$QM_LOG_BASE/settings"
QM_LOG_SYSTEM="$QM_LOG_BASE/system"
# Log levels
QM_LOG_ERROR="ERROR"
QM_LOG_WARN="WARN"
QM_LOG_INFO="INFO"
QM_LOG_DEBUG="DEBUG"
# Maximum log file size (in KB) - keep small for OpenWrt
QM_LOG_MAX_SIZE=500
# Initialize log directories
qm_init_logs() {
mkdir -p "$QM_LOG_DAEMONS" "$QM_LOG_SERVICES" "$QM_LOG_SETTINGS" "$QM_LOG_SYSTEM" 2>/dev/null || true
}
# Get log file path based on category and script name
qm_get_logfile() {
local category="$1"
local script_name="$2"
case "$category" in
"daemon"|"daemons")
echo "$QM_LOG_DAEMONS/${script_name}.log"
;;
"service"|"services")
echo "$QM_LOG_SERVICES/${script_name}.log"
;;
"setting"|"settings")
echo "$QM_LOG_SETTINGS/${script_name}.log"
;;
"system")
echo "$QM_LOG_SYSTEM/${script_name}.log"
;;
*)
echo "$QM_LOG_SYSTEM/unknown.log"
;;
esac
}
# Simple log rotation - keep it OpenWrt compatible
qm_rotate_log() {
local logfile="$1"
if [ -f "$logfile" ]; then
# Get file size in KB (use du for BusyBox compatibility)
local size_kb=$(du -k "$logfile" 2>/dev/null | cut -f1)
if [ "${size_kb:-0}" -gt "$QM_LOG_MAX_SIZE" ]; then
# Simple rotation: keep last 2 versions
[ -f "${logfile}.1" ] && mv "${logfile}.1" "${logfile}.2" 2>/dev/null || true
mv "$logfile" "${logfile}.1" 2>/dev/null || true
touch "$logfile" 2>/dev/null || true
fi
fi
}
# Main logging function
# Usage: qm_log "category" "script_name" "level" "message"
qm_log() {
local category="$1"
local script_name="$2"
local level="$3"
local message="$4"
# Initialize if needed
qm_init_logs
# Get log file path
local logfile=$(qm_get_logfile "$category" "$script_name")
# Rotate if needed
qm_rotate_log "$logfile"
# Create log entry with OpenWrt compatible date
local timestamp=$(date '+%Y-%m-%d %H:%M:%S' 2>/dev/null || date)
local pid="$$"
# Write log entry
printf '[%s] [%s] [%s] [PID:%s] %s\n' "$timestamp" "$level" "$script_name" "$pid" "$message" >> "$logfile" 2>/dev/null || true
}
# Convenience functions for different log levels
qm_log_error() {
qm_log "$1" "$2" "$QM_LOG_ERROR" "$3"
}
qm_log_warn() {
qm_log "$1" "$2" "$QM_LOG_WARN" "$3"
}
qm_log_info() {
qm_log "$1" "$2" "$QM_LOG_INFO" "$3"
}
qm_log_debug() {
qm_log "$1" "$2" "$QM_LOG_DEBUG" "$3"
}
# Cleanup old logs (called periodically)
qm_cleanup_logs() {
# Remove .2 backup files older than 1 day to save space
find "$QM_LOG_BASE" -name "*.2" -type f -mtime +1 -delete 2>/dev/null || true
}