mirror of
https://github.com/RetroDECK/RetroDECK.git
synced 2024-11-22 05:55:38 +00:00
118 lines
4.3 KiB
Bash
Executable file
118 lines
4.3 KiB
Bash
Executable file
# This script provides a logging function 'log' that can be sourced in other scripts.
|
|
# It logs messages to both the terminal and a specified logfile, allowing different log levels.
|
|
# The log function takes three parameters: log level, log message, and optionally the logfile. If no logfile is specified, it writes to retrodeck/logs/retrodeck.log
|
|
|
|
# Example usage:
|
|
# log w "foo" -> logs a warning with message foo in the default log file retrodeck/logs/retrodeck.log
|
|
# log e "bar" -> logs an error with message bar in the default log file retrodeck/logs/retrodeck.log
|
|
# log i "par" rekku.log -> logs an information with message in the specified log file inside the logs folder retrodeck/logs/rekku.log
|
|
|
|
if [ "${log_init:-false}" = false ]; then
|
|
logs_folder=${logs_folder:-"/tmp"}
|
|
touch "$logs_folder/retrodeck.log"
|
|
# exec > >(tee "$logs_folder/retrodeck.log") 2>&1 # this is broken, creates strange artifacts and corrupts the log file
|
|
log_init=true
|
|
fi
|
|
|
|
log() {
|
|
|
|
# exec > >(tee "$logs_folder/retrodeck.log") 2>&1 # this is broken, creates strange artifacts and corrupts the log file
|
|
|
|
local level="$1"
|
|
local message="$2"
|
|
local timestamp="$(date +[%Y-%m-%d\ %H:%M:%S.%3N])"
|
|
local colorize_terminal
|
|
|
|
# Use specified logfile or default to retrodeck.log
|
|
local logfile
|
|
if [ -n "$3" ]; then
|
|
logfile="$3"
|
|
else
|
|
logfile="$logs_folder/retrodeck.log"
|
|
fi
|
|
|
|
# Check if the shell is sh (not bash or zsh) to avoid colorization
|
|
if [ "${SHELL##*/}" = "sh" ]; then
|
|
colorize_terminal=false
|
|
else
|
|
colorize_terminal=true
|
|
fi
|
|
|
|
case "$level" in
|
|
w)
|
|
if [ "$colorize_terminal" = true ]; then
|
|
# Warning (yellow) for terminal
|
|
colored_message="\e[33m[WARN]\e[0m $message"
|
|
else
|
|
# Warning (no color for sh) for terminal
|
|
colored_message="$timestamp [WARN] $message"
|
|
fi
|
|
# Write to log file without colorization
|
|
log_message="$timestamp [WARN] $message"
|
|
;;
|
|
e)
|
|
if [ "$colorize_terminal" = true ]; then
|
|
# Error (red) for terminal
|
|
colored_message="\e[31m[ERROR]\e[0m $message"
|
|
else
|
|
# Error (no color for sh) for terminal
|
|
colored_message="$timestamp [ERROR] $message"
|
|
fi
|
|
# Write to log file without colorization
|
|
log_message="$timestamp [ERROR] $message"
|
|
;;
|
|
i)
|
|
if [ "$colorize_terminal" = true ]; then
|
|
# Info (green) for terminal
|
|
colored_message="\e[32m[INFO]\e[0m $message"
|
|
else
|
|
# Info (no color for sh) for terminal
|
|
colored_message="$timestamp [INFO] $message"
|
|
fi
|
|
# Write to log file without colorization
|
|
log_message="$timestamp [INFO] $message"
|
|
;;
|
|
d)
|
|
if [ "$colorize_terminal" = true ]; then
|
|
# Debug (green) for terminal
|
|
colored_message="\e[32m[DEBUG]\e[0m $message"
|
|
else
|
|
# Debug (no color for sh) for terminal
|
|
colored_message="$timestamp [DEBUG] $message"
|
|
fi
|
|
# Write to log file without colorization
|
|
log_message="$timestamp [DEBUG] $message"
|
|
;;
|
|
*)
|
|
# Default (no color for other shells) for terminal
|
|
colored_message="$timestamp $message"
|
|
# Write to log file without colorization
|
|
log_message="$timestamp $message"
|
|
;;
|
|
esac
|
|
|
|
# Display the message in the terminal
|
|
echo -e "$colored_message"
|
|
|
|
# Write the log message to the log file
|
|
echo "$log_message" >> "$logfile"
|
|
|
|
}
|
|
|
|
# This function is merging the temporary log file into the actual one
|
|
tmplog_merger() {
|
|
|
|
# Check if /tmp/retrodeck.log exists
|
|
if [ -e "/tmp/retrodeck.log" ]; then
|
|
|
|
# Sort both temporary and existing log files by timestamp
|
|
sort -k1,1n -k2,2M -k3,3n -k4,4n -k5,5n "/tmp/retrodeck.log" "$logs_folder/retrodeck.log" > "$logs_folder/merged_logs.tmp"
|
|
|
|
# Move the merged logs to replace the original log file
|
|
mv "$logs_folder/merged_logs.tmp" "$logs_folder/retrodeck.log"
|
|
|
|
# Remove the temporary file
|
|
rm "/tmp/retrodeck.log"
|
|
fi
|
|
}
|