diff --git a/grafana-configs/loki_logger.py b/grafana-configs/loki_logger.py index 59a901b..a86a969 100644 --- a/grafana-configs/loki_logger.py +++ b/grafana-configs/loki_logger.py @@ -5,6 +5,7 @@ """ import json +import sys import time from datetime import datetime from threading import Thread @@ -111,9 +112,12 @@ def _send_to_loki_sync(self, level: str, message: str) -> None: def _log(self, level: str, message: str) -> None: """Queue log entry for async processing (non-blocking)""" - # Print to console immediately for real-time feedback + # Print to console immediately for real-time feedback. Written to + # stderr (not stdout) so callers that capture a subprocess's stdout + # for its return value (e.g. decrypt_vault_secrets.py) never pick up + # log lines mixed in with the actual output. timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - print(f"[{timestamp}] {level: <8} | {message}") # noqa: T201 + print(f"[{timestamp}] {level: <8} | {message}", file=sys.stderr) # noqa: T201 # Queue for async Loki sending (non-blocking) try: diff --git a/src/loki_logger.py b/src/loki_logger.py index b70be5b..d780fce 100644 --- a/src/loki_logger.py +++ b/src/loki_logger.py @@ -13,6 +13,7 @@ """ import json +import sys import time from datetime import datetime from threading import Thread @@ -119,9 +120,12 @@ def _send_to_loki_sync(self, level: str, message: str) -> None: def _log(self, level: str, message: str) -> None: """Queue log entry for async processing (non-blocking)""" - # Print to console immediately for real-time feedback + # Print to console immediately for real-time feedback. Written to + # stderr (not stdout) so callers that capture a subprocess's stdout + # for its return value (e.g. decrypt_vault_secrets.py) never pick up + # log lines mixed in with the actual output. timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - print(f"[{timestamp}] {level: <8} | {message}") # noqa: T201 + print(f"[{timestamp}] {level: <8} | {message}", file=sys.stderr) # noqa: T201 # Queue for async Loki sending (non-blocking, drops log if queue is full) try: diff --git a/src/vector_indexer/loki_logger.py b/src/vector_indexer/loki_logger.py index 59a901b..a86a969 100644 --- a/src/vector_indexer/loki_logger.py +++ b/src/vector_indexer/loki_logger.py @@ -5,6 +5,7 @@ """ import json +import sys import time from datetime import datetime from threading import Thread @@ -111,9 +112,12 @@ def _send_to_loki_sync(self, level: str, message: str) -> None: def _log(self, level: str, message: str) -> None: """Queue log entry for async processing (non-blocking)""" - # Print to console immediately for real-time feedback + # Print to console immediately for real-time feedback. Written to + # stderr (not stdout) so callers that capture a subprocess's stdout + # for its return value (e.g. decrypt_vault_secrets.py) never pick up + # log lines mixed in with the actual output. timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") - print(f"[{timestamp}] {level: <8} | {message}") # noqa: T201 + print(f"[{timestamp}] {level: <8} | {message}", file=sys.stderr) # noqa: T201 # Queue for async Loki sending (non-blocking) try: