diff --git a/routes/utils/celery_manager.py b/routes/utils/celery_manager.py index 686dda9..e75519b 100644 --- a/routes/utils/celery_manager.py +++ b/routes/utils/celery_manager.py @@ -73,6 +73,12 @@ class CeleryManager: logger.debug(f"Generated Celery command: {' '.join(command)}") return command + def _get_worker_env(self): + # Inherit current environment, but set NO_CONSOLE_LOG=1 for subprocess + env = os.environ.copy() + env["NO_CONSOLE_LOG"] = "1" + return env + def _process_output_reader(self, stream, log_prefix, error=False): logger.debug(f"Log reader thread started for {log_prefix}") try: @@ -141,6 +147,7 @@ class CeleryManager: text=True, bufsize=1, universal_newlines=True, + env=self._get_worker_env(), ) self.download_log_thread_stdout = threading.Thread( target=self._process_output_reader, @@ -177,6 +184,7 @@ class CeleryManager: text=True, bufsize=1, universal_newlines=True, + env=self._get_worker_env(), ) self.utility_log_thread_stdout = threading.Thread( target=self._process_output_reader, diff --git a/routes/utils/celery_tasks.py b/routes/utils/celery_tasks.py index 52853f5..9bec287 100644 --- a/routes/utils/celery_tasks.py +++ b/routes/utils/celery_tasks.py @@ -285,9 +285,16 @@ def setup_celery_logging(**kwargs): """ This handler ensures Celery uses our application logging settings instead of its own. Prevents duplicate log configurations. + Also disables console logging if NO_CONSOLE_LOG=1 is set in the environment. """ - # Using the root logger's handlers and level preserves our config - return logging.getLogger() + root_logger = logging.getLogger() + import os + if os.environ.get("NO_CONSOLE_LOG") == "1": + # Remove all StreamHandlers (console handlers) from the root logger + handlers_to_remove = [h for h in root_logger.handlers if isinstance(h, logging.StreamHandler)] + for h in handlers_to_remove: + root_logger.removeHandler(h) + return root_logger # The initialization of a worker will log the worker configuration