From e5675f8874b9b00f056c873472a0c72883b5efa6 Mon Sep 17 00:00:00 2001 From: Rafael Moraes <50295204+glomatico@users.noreply.github.com> Date: Sun, 26 Apr 2026 00:38:08 -0300 Subject: [PATCH] Use CustomOutputWriter for structlog output --- gamdl/cli/cli.py | 18 +++++------------- gamdl/cli/utils.py | 23 +++++++++++++++++++++++ 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/gamdl/cli/cli.py b/gamdl/cli/cli.py index 1960519..00426f4 100644 --- a/gamdl/cli/cli.py +++ b/gamdl/cli/cli.py @@ -1,5 +1,4 @@ import asyncio -import logging from functools import wraps from pathlib import Path @@ -38,7 +37,7 @@ from .cli_config import CliConfig from .config_file import ConfigFile from .database import Database from .interactive_prompts import InteractivePrompts -from .utils import custom_structlog_formatter, prompt_path +from .utils import CustomOutputWriter, custom_structlog_formatter, prompt_path logger = structlog.get_logger(__name__) @@ -60,18 +59,10 @@ def make_sync(func): async def main(config: CliConfig): colorama.just_fix_windows_console() - root_logger = logging.getLogger(__name__.split(".")[0]) - root_logger.setLevel(config.log_level) - root_logger.propagate = False - - stream_handler = logging.StreamHandler() - stream_handler.setFormatter(logging.Formatter("%(message)s")) - root_logger.addHandler(stream_handler) + log_output = CustomOutputWriter() if config.log_file: - file_handler = logging.FileHandler(config.log_file, encoding="utf-8") - file_handler.setFormatter(logging.Formatter("%(message)s")) - root_logger.addHandler(file_handler) + log_output.add_file(config.log_file) structlog.configure( processors=[ @@ -79,7 +70,8 @@ async def main(config: CliConfig): structlog.processors.ExceptionPrettyPrinter(), custom_structlog_formatter, ], - logger_factory=structlog.stdlib.LoggerFactory(), + logger_factory=structlog.PrintLoggerFactory(file=log_output), + wrapper_class=structlog.make_filtering_bound_logger(config.log_level), ) logger.info(f"Starting Gamdl {__version__}") diff --git a/gamdl/cli/utils.py b/gamdl/cli/utils.py index bdd0837..325e18c 100644 --- a/gamdl/cli/utils.py +++ b/gamdl/cli/utils.py @@ -1,3 +1,5 @@ +import atexit +import sys from datetime import datetime from enum import Enum from pathlib import Path @@ -39,6 +41,27 @@ class Csv(click.ParamType): return result +class CustomOutputWriter: + def __init__( + self, + streams: list[Any] = [sys.stdout], + ): + self.streams = streams + + def add_file(self, path: str): + file_stream = open(path, "a") + atexit.register(file_stream.close) + self.streams.append(file_stream) + + def write(self, message: str): + for stream in self.streams: + stream.write(message) + + def flush(self): + for stream in self.streams: + stream.flush() + + def custom_structlog_formatter( logger: Any, name: str,