Add --verbose flag for verbose logging

Don't log HTTP payloads unless --verbose flag is given. Always logging
HTTP payloads tends to make the log unreadable.
This commit is contained in:
Ivan Habunek 2024-08-28 12:58:36 +02:00
parent a808b7d8ec
commit 07efac1ae7
No known key found for this signature in database
GPG Key ID: 01DB3DD0D824504C
3 changed files with 15 additions and 8 deletions

View File

@ -80,11 +80,12 @@ def validate_rate(_ctx: click.Context, _param: click.Parameter, value: str) -> O
@click.group(context_settings=CONTEXT) @click.group(context_settings=CONTEXT)
@click.option("--debug/--no-debug", default=False, help="Log debug info to stderr") @click.option("--debug/--no-debug", default=False, help="Enable debug logging to stderr")
@click.option("--verbose/--no-verbose", default=False, help="More verbose debug logging")
@click.option("--color/--no-color", default=sys.stdout.isatty(), help="Use ANSI color in output") @click.option("--color/--no-color", default=sys.stdout.isatty(), help="Use ANSI color in output")
@click.version_option(package_name="twitch-dl") @click.version_option(package_name="twitch-dl")
@click.pass_context @click.pass_context
def cli(ctx: click.Context, color: bool, debug: bool): def cli(ctx: click.Context, color: bool, debug: bool, verbose: bool):
"""twitch-dl - twitch.tv downloader """twitch-dl - twitch.tv downloader
https://twitch-dl.bezdomni.net/ https://twitch-dl.bezdomni.net/
@ -92,7 +93,7 @@ def cli(ctx: click.Context, color: bool, debug: bool):
ctx.color = color ctx.color = color
if debug: if debug:
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG if verbose else logging.INFO)
logging.getLogger("httpx").setLevel(logging.WARN) logging.getLogger("httpx").setLevel(logging.WARN)
logging.getLogger("httpcore").setLevel(logging.WARN) logging.getLogger("httpcore").setLevel(logging.WARN)

View File

@ -149,12 +149,16 @@ async def download_all(
def download_file(url: str, target: Path, retries: int = RETRY_COUNT) -> None: def download_file(url: str, target: Path, retries: int = RETRY_COUNT) -> None:
"""Download URL to given target path with retries""" """Download URL to given target path with retries"""
error_message = "" error_message = ""
for _ in range(retries): for r in range(retries):
try: try:
retry_info = f" (retry {r})" if r > 0 else ""
logger.info(f"Downloading {url} to {target}{retry_info}")
return _do_download_file(url, target) return _do_download_file(url, target)
except httpx.HTTPStatusError as ex: except httpx.HTTPStatusError as ex:
logger.error(ex)
error_message = f"Server responded with HTTP {ex.response.status_code}" error_message = f"Server responded with HTTP {ex.response.status_code}"
except httpx.RequestError as ex: except httpx.RequestError as ex:
logger.error(ex)
error_message = str(ex) error_message = str(ex)
raise ConsoleError(f"Failed downloading after {retries} attempts: {error_message}") raise ConsoleError(f"Failed downloading after {retries} attempts: {error_message}")

View File

@ -22,6 +22,7 @@ from twitchdl.entities import (
VideosType, VideosType,
) )
from twitchdl.exceptions import ConsoleError from twitchdl.exceptions import ConsoleError
from twitchdl.utils import format_size
class GQLError(click.ClickException): class GQLError(click.ClickException):
@ -78,15 +79,16 @@ logger = logging.getLogger(__name__)
def log_request(request: httpx.Request): def log_request(request: httpx.Request):
logger.debug(f"--> {request.method} {request.url}") logger.info(f"--> {request.method} {request.url}")
if request.content: if request.content:
logger.debug(f"--> {request.content}") logger.debug(f"--> {request.content}")
def log_response(response: httpx.Response, duration: float): def log_response(response: httpx.Response, duration_seconds: float):
request = response.request request = response.request
duration_ms = int(1000 * duration) duration = f"{int(1000 * duration_seconds)}ms"
logger.debug(f"<-- {request.method} {request.url} HTTP {response.status_code} {duration_ms}ms") size = format_size(len(response.content))
logger.info(f"<-- {request.method} {request.url} HTTP {response.status_code} {duration} {size}")
if response.content: if response.content:
logger.debug(f"<-- {response.content}") logger.debug(f"<-- {response.content}")