diff --git a/logger.sh b/logger.sh index 8503fcc..485600c 100755 --- a/logger.sh +++ b/logger.sh @@ -1,74 +1,32 @@ #!/bin/bash -# --- Zentrale Logging-Funktion --- -# Dieses Skript stellt Funktionen für das Logging bereit. -# Es ist als "Source-File" gedacht, d.h. es wird in andere Skripte geladen: -# source /path/to/your/logger.sh +DEFAULT_LOG_FILE="/root/log.txt" +ACTIVE_LOG_FILE="" -# Standard-Log-Datei (kann in aufrufendem Skript überschrieben werden) -DEFAULT_LOG_FILE="/root/log.txt" # <-- Anpassen, wenn gewünscht - -# Funktion zur Initialisierung des Loggers -# Argument 1: Pfad zur Log-Datei für das aktuelle Skript -# Usage: init_logger "/path/to/your/script.log" log_init() { - local log_file="${1:-$DEFAULT_LOG_FILE}" # Nutze Argument 1, sonst Standard - - # Sicherstellen, dass das Log-Verzeichnis existiert - mkdir -p "$(dirname "${log_file}")" - - # Leite NUR die Standardausgabe (stdout) in die Log-Datei um (anhängen) - # Fehlerausgabe (stderr) bleibt auf stderr (oder wird von rclone 2>/dev/null abgefangen) - exec 1>>"${log_file}" - - # Speichere den Pfad der aktiven Log-Datei in einer globalen Variable - # So können spätere Funktionen den korrekten Log-Pfad verwenden, falls nötig - ACTIVE_LOG_FILE="${log_file}" + ACTIVE_LOG_FILE="${1:-$DEFAULT_LOG_FILE}" + mkdir -p "$(dirname "${ACTIVE_LOG_FILE}")" } -# Funktion für INFO-Meldungen -# Usage: log_info "Dies ist eine Info-Nachricht." -log_info() { - local message="$1" - echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] ${message}" +_log_dual() { + local level="$1" + local message="$2" + local timestamp + timestamp="$(date '+%Y-%m-%d %H:%M:%S')" + local line="${timestamp} [${level}] ${message}" + + echo "$line" # Konsole + echo "$line" >> "${ACTIVE_LOG_FILE}" # Logdatei } -# Funktion für WARN-Meldungen -# Usage: log_warn "Dies ist eine Warnung!" -log_warn() { - local message="$1" - echo "$(date '+%Y-%m-%d %H:%M:%S') [WARN] ${message}" -} - -# Funktion für ERROR-Meldungen -# Usage: log_error "Dies ist ein Fehler!" -log_error() { - local message="$1" - echo "$(date '+%Y-%m-%d %H:%M:%S') [ERROR] ${message}" - # Optional: Fehler zusätzlich an stderr senden oder eine Benachrichtigung auslösen - # echo "$(date '+%Y-%m-%d %H:%M:%S') [ERROR] ${message}" >&2 -} - -# Funktion zum Starten eines Skripts im Log -# Usage: log_start "Name des Skripts" +log_info() { _log_dual "INFO" "$1"; } +log_warn() { _log_dual "WARN" "$1"; } +log_error() { _log_dual "ERROR" "$1"; } log_start() { - local script_name="$1" - echo "" # Leere Zeile für bessere Trennung - echo "--- ${script_name} gestartet: $(date) ---" + echo "" | tee -a "${ACTIVE_LOG_FILE}" + _log_dual "START" "--- $1 gestartet ---" } - -# Funktion zum Beenden eines Skripts im Log -# Usage: log_end "Name des Skripts" log_end() { - local script_name="$1" - echo "--- ${script_name} abgeschlossen: $(date) ---" - echo "" # Leere Zeile für bessere Trennung + _log_dual "END" "--- $1 abgeschlossen ---" + echo "" | tee -a "${ACTIVE_LOG_FILE}" } - -# Hilfsfunktion, um rclone-Fortschritt zu unterdrücken, aber Warnungen/Fehler durchzulassen -# (Dies ist eine erweiterte Funktion, die für rclone -P hilfreich ist. -# Sie sollte rclone's stdout und stderr separat behandeln, um Warnungen/Fehler von rclone -# ins Log zu bekommen, aber den Fortschritt zu unterdrücken. Das ist komplexer mit exec.) -# Für den rclone-Fall ist es einfacher, 2>/dev/null direkt am rclone-Befehl zu belassen, -# und unsere log_warn zu nutzen, wenn $? -ne 0 ist. -