diff --git a/taskiq/cli/worker/args.py b/taskiq/cli/worker/args.py index bb50300b..06b7fa2a 100644 --- a/taskiq/cli/worker/args.py +++ b/taskiq/cli/worker/args.py @@ -30,6 +30,9 @@ class WorkerArgs: fs_discover: bool = False configure_logging: bool = True log_level: LogLevel = LogLevel.INFO + log_format: str = ( + "[%(asctime)s][%(name)s][%(levelname)-7s][%(processName)s] %(message)s" + ) workers: int = 2 max_threadpool_threads: Optional[int] = None max_process_pool_processes: Optional[int] = None @@ -118,6 +121,12 @@ def from_cli( choices=[level.name for level in LogLevel], help="worker log level", ) + parser.add_argument( + "--log-format", + default="[%(asctime)s][%(name)s][%(levelname)-7s]" + "[%(processName)s] %(message)s", + help="worker log format", + ) parser.add_argument( "--workers", "-w", diff --git a/taskiq/cli/worker/run.py b/taskiq/cli/worker/run.py index 4b5f2d57..3d58fedf 100644 --- a/taskiq/cli/worker/run.py +++ b/taskiq/cli/worker/run.py @@ -5,7 +5,7 @@ import signal import sys from concurrent.futures import Executor, ProcessPoolExecutor, ThreadPoolExecutor -from multiprocessing import set_start_method +from multiprocessing import get_start_method, set_start_method from sys import platform from typing import Any, Optional, Type @@ -86,6 +86,11 @@ def start_listen(args: WorkerArgs) -> None: """ shutdown_event = asyncio.Event() hardkill_counter = 0 + if args.configure_logging and get_start_method() == "spawn": + logging.basicConfig( + level=logging.getLevelName(args.log_level), + format=args.log_format, + ) def interrupt_handler(signum: int, _frame: Any) -> None: """ @@ -186,8 +191,7 @@ def run_worker(args: WorkerArgs) -> Optional[int]: if args.configure_logging: logging.basicConfig( level=logging.getLevelName(args.log_level), - format="[%(asctime)s][%(name)s][%(levelname)-7s]" - "[%(processName)s] %(message)s", + format=args.log_format, ) logging.getLogger("taskiq").setLevel(level=logging.getLevelName(args.log_level)) logging.getLogger("watchdog.observers.inotify_buffer").setLevel(level=logging.INFO)