mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Fix #3919: become silent if logging settings are cleared
This commit is contained in:
parent
ad2610a0bc
commit
90352cf940
@ -29,6 +29,7 @@ if False:
|
|||||||
from sphinx.application import Sphinx # NOQA
|
from sphinx.application import Sphinx # NOQA
|
||||||
|
|
||||||
|
|
||||||
|
NAMESPACE = 'sphinx'
|
||||||
VERBOSE = 15
|
VERBOSE = 15
|
||||||
|
|
||||||
LEVEL_NAMES = defaultdict(lambda: logging.WARNING) # type: Dict[str, int]
|
LEVEL_NAMES = defaultdict(lambda: logging.WARNING) # type: Dict[str, int]
|
||||||
@ -59,8 +60,18 @@ COLOR_MAP.update({
|
|||||||
|
|
||||||
def getLogger(name):
|
def getLogger(name):
|
||||||
# type: (str) -> SphinxLoggerAdapter
|
# type: (str) -> SphinxLoggerAdapter
|
||||||
"""Get logger wrapped by SphinxLoggerAdapter."""
|
"""Get logger wrapped by SphinxLoggerAdapter.
|
||||||
return SphinxLoggerAdapter(logging.getLogger(name), {})
|
|
||||||
|
Sphinx logger always uses ``sphinx.*`` namesapce to be independent from
|
||||||
|
settings of root logger. It enables to log stably even if 3rd party
|
||||||
|
extension or imported application resets logger settings.
|
||||||
|
"""
|
||||||
|
# add sphinx prefix to name forcely
|
||||||
|
logger = logging.getLogger(NAMESPACE + '.' + name)
|
||||||
|
# Forcely enable logger
|
||||||
|
logger.disabled = False
|
||||||
|
# wrap logger by SphinxLoggerAdapter
|
||||||
|
return SphinxLoggerAdapter(logger, {})
|
||||||
|
|
||||||
|
|
||||||
def convert_serializable(records):
|
def convert_serializable(records):
|
||||||
@ -203,7 +214,7 @@ class MemoryHandler(logging.handlers.BufferingHandler):
|
|||||||
def pending_warnings():
|
def pending_warnings():
|
||||||
# type: () -> Generator
|
# type: () -> Generator
|
||||||
"""contextmanager to pend logging warnings temporary."""
|
"""contextmanager to pend logging warnings temporary."""
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger(NAMESPACE)
|
||||||
memhandler = MemoryHandler()
|
memhandler = MemoryHandler()
|
||||||
memhandler.setLevel(logging.WARNING)
|
memhandler.setLevel(logging.WARNING)
|
||||||
|
|
||||||
@ -229,7 +240,7 @@ def pending_warnings():
|
|||||||
def pending_logging():
|
def pending_logging():
|
||||||
# type: () -> Generator
|
# type: () -> Generator
|
||||||
"""contextmanager to pend logging all logs temporary."""
|
"""contextmanager to pend logging all logs temporary."""
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger(NAMESPACE)
|
||||||
memhandler = MemoryHandler()
|
memhandler = MemoryHandler()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -253,7 +264,7 @@ def pending_logging():
|
|||||||
def skip_warningiserror(skip=True):
|
def skip_warningiserror(skip=True):
|
||||||
# type: (bool) -> Generator
|
# type: (bool) -> Generator
|
||||||
"""contextmanager to skip WarningIsErrorFilter for a while."""
|
"""contextmanager to skip WarningIsErrorFilter for a while."""
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger(NAMESPACE)
|
||||||
|
|
||||||
if skip is False:
|
if skip is False:
|
||||||
yield
|
yield
|
||||||
@ -469,8 +480,9 @@ class LastMessagesWriter(object):
|
|||||||
def setup(app, status, warning):
|
def setup(app, status, warning):
|
||||||
# type: (Sphinx, IO, IO) -> None
|
# type: (Sphinx, IO, IO) -> None
|
||||||
"""Setup root logger for Sphinx"""
|
"""Setup root logger for Sphinx"""
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger(NAMESPACE)
|
||||||
logger.setLevel(logging.NOTSET)
|
logger.setLevel(logging.DEBUG)
|
||||||
|
logger.propagate = False
|
||||||
|
|
||||||
# clear all handlers
|
# clear all handlers
|
||||||
for handler in logger.handlers[:]:
|
for handler in logger.handlers[:]:
|
||||||
|
Loading…
Reference in New Issue
Block a user