Fix app.messagelog does not filled after moving to logging module

This commit is contained in:
Takeshi KOMIYA
2017-03-26 18:53:08 +09:00
parent 46acb4fbe4
commit ed167d661c
2 changed files with 19 additions and 0 deletions

View File

@@ -153,6 +153,7 @@ class Sphinx(object):
self._translators = {} # type: Dict[unicode, nodes.GenericNodeVisitor]
# keep last few messages for traceback
# This will be filled by sphinx.util.logging.LastMessagesWriter
self.messagelog = deque(maxlen=10) # type: deque
# say hello to the world

View File

@@ -406,6 +406,17 @@ class SafeEncodingWriter(object):
self.stream.flush()
class LastMessagesWriter(object):
"""Stream writer which memories last 10 messages to save trackback"""
def __init__(self, app, stream):
# type: (IO) -> None
self.app = app
def write(self, data):
# type: (unicode) -> None
self.app.messagelog.append(data)
def setup(app, status, warning):
# type: (Sphinx, IO, IO) -> None
"""Setup root logger for Sphinx"""
@@ -427,5 +438,12 @@ def setup(app, status, warning):
warning_handler.addFilter(WarningLogRecordTranslator(app))
warning_handler.setLevel(logging.WARNING)
warning_handler.setFormatter(ColorizeFormatter())
messagelog_handler = logging.StreamHandler(LastMessagesWriter(app, status))
messagelog_handler.addFilter(InfoFilter())
messagelog_handler.setLevel(VERBOSITY_MAP[app.verbosity])
messagelog_handler.setFormatter(ColorizeFormatter())
logger.addHandler(info_handler)
logger.addHandler(warning_handler)
logger.addHandler(messagelog_handler)