log_formatter.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import sys
  2. import re
  3. # Regex zum Finden des Script-Namens im Command
  4. # Sucht nach: job.command="... /scripts/(DATEINAME)"
  5. script_pattern = re.compile(r'job\.command=".*?/scripts/([^"]+)"')
  6. # Regex zum Finden der eigentlichen Nachricht
  7. # Sucht nach: msg="NACHRICHT"
  8. msg_pattern = re.compile(r'msg="(.*?)"')
  9. def clean_log():
  10. # Liest Standard-Input (Pipe von Supercronic)
  11. for line in sys.stdin:
  12. # Wir interessieren uns nur für Zeilen, die von unseren Scripts kommen
  13. # (channel=stdout oder channel=stderr)
  14. if 'channel=stdout' in line or 'channel=stderr' in line:
  15. # Script Namen extrahieren
  16. script_match = script_pattern.search(line)
  17. script_name = script_match.group(1) if script_match else "Unknown"
  18. # Nachricht extrahieren
  19. msg_match = msg_pattern.search(line)
  20. message = msg_match.group(1) if msg_match else line.strip()
  21. # Gewünschtes Format ausgeben: [script.py] Nachricht
  22. print(f"[{script_name}] {message}")
  23. # WICHTIG: Sofort flushen, damit Logs nicht verzögert erscheinen
  24. sys.stdout.flush()
  25. elif 'level=error' in line or 'level=warning' in line:
  26. # System-Fehler von Supercronic (z.B. Syntaxfehler im Cron) trotzdem anzeigen
  27. print(f"[SYSTEM] {line.strip()}")
  28. sys.stdout.flush()
  29. if __name__ == "__main__":
  30. clean_log()