Changes default logger used by blib2to3 Driver (#732)

... to stop it from spamming the log when black is used as a library in another
    python application.

When used indirectly by black the logger initiated in `driver.py` will emit
thousands of debug messages making the debug level of the root logger virtually
useless. By getting a named logger instead the verbosity of logging from this
module can easily be controlled by setting its log level.

Fixes #715
This commit is contained in:
Anders-Petter Ljungquist 2019-03-14 13:39:42 +01:00 committed by Łukasz Langa
parent 275a85f598
commit 227c2d77b4
3 changed files with 21 additions and 3 deletions

View File

@ -11,3 +11,6 @@ Reasons for forking:
- better ability to debug (better reprs)
- INDENT and DEDENT don't hold whitespace and comment prefixes
- ability to Cythonize
Change Log:
- Changes default logger used by Driver

View File

@ -32,7 +32,7 @@ class Driver(object):
def __init__(self, grammar, convert=None, logger=None):
self.grammar = grammar
if logger is None:
logger = logging.getLogger()
logger = logging.getLogger(__name__)
self.logger = logger
self.convert = convert
@ -157,7 +157,7 @@ def load_grammar(gt="Grammar.txt", gp=None,
save=True, force=False, logger=None):
"""Load the grammar (maybe from a pickle)."""
if logger is None:
logger = logging.getLogger()
logger = logging.getLogger(__name__)
gp = _generate_pickle_name(gt) if gp is None else gp
if force or not _newer(gp, gt):
logger.info("Generating grammar tables from %s", gt)

View File

@ -1,5 +1,6 @@
#!/usr/bin/env python3
import asyncio
import logging
from concurrent.futures import ThreadPoolExecutor
from contextlib import contextmanager, redirect_stderr
from functools import partial, wraps
@ -37,7 +38,6 @@
else:
has_blackd_deps = True
ff = partial(black.format_file_in_place, mode=black.FileMode(), fast=True)
fs = partial(black.format_str, mode=black.FileMode())
THIS_FILE = Path(__file__)
@ -1356,6 +1356,21 @@ def test_shhh_click(self) -> None:
except RuntimeError as re:
self.fail(f"`patch_click()` failed, exception still raised: {re}")
def test_root_logger_not_used_directly(self) -> None:
def fail(*args: Any, **kwargs: Any) -> None:
self.fail("Record created with root logger")
with patch.multiple(
logging.root,
debug=fail,
info=fail,
warning=fail,
error=fail,
critical=fail,
log=fail,
):
ff(THIS_FILE)
@unittest.skipUnless(has_blackd_deps, "blackd's dependencies are not installed")
@async_test
async def test_blackd_request_needs_formatting(self) -> None: