mirror of https://github.com/Textualize/rich.git
Refactor logging
This commit is contained in:
parent
f96e62c011
commit
7fa7001546
|
@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- MarkupError exception raise from None to omit internal exception
|
- MarkupError exception raise from None to omit internal exception
|
||||||
|
- Factored out RichHandler.render and RichHandler.render_message for easier extending
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ from typing import ClassVar, List, Optional, Type, Union
|
||||||
|
|
||||||
from . import get_console
|
from . import get_console
|
||||||
from ._log_render import LogRender
|
from ._log_render import LogRender
|
||||||
from .console import Console
|
from .console import Console, ConsoleRenderable
|
||||||
from .highlighter import Highlighter, ReprHighlighter
|
from .highlighter import Highlighter, ReprHighlighter
|
||||||
from .text import Text
|
from .text import Text
|
||||||
from .traceback import Traceback
|
from .traceback import Traceback
|
||||||
|
@ -110,11 +110,7 @@ class RichHandler(Handler):
|
||||||
|
|
||||||
def emit(self, record: LogRecord) -> None:
|
def emit(self, record: LogRecord) -> None:
|
||||||
"""Invoked by logging."""
|
"""Invoked by logging."""
|
||||||
path = Path(record.pathname).name
|
|
||||||
level = self.get_level_text(record)
|
|
||||||
message = self.format(record)
|
message = self.format(record)
|
||||||
time_format = None if self.formatter is None else self.formatter.datefmt
|
|
||||||
log_time = datetime.fromtimestamp(record.created)
|
|
||||||
|
|
||||||
traceback = None
|
traceback = None
|
||||||
if (
|
if (
|
||||||
|
@ -139,31 +135,66 @@ class RichHandler(Handler):
|
||||||
)
|
)
|
||||||
message = record.getMessage()
|
message = record.getMessage()
|
||||||
|
|
||||||
|
message_renderable = self.render_message(record, message)
|
||||||
|
log_renderable = self.render(
|
||||||
|
record=record, traceback=traceback, message_renderable=message_renderable
|
||||||
|
)
|
||||||
|
self.console.print(log_renderable)
|
||||||
|
|
||||||
|
def render_message(self, record: LogRecord, message: str) -> "ConsoleRenderable":
|
||||||
|
"""Render message text in to Text.
|
||||||
|
|
||||||
|
record (LogRecord): logging Record.
|
||||||
|
message (str): String cotaining log message.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
ConsoleRenderable: Renderable to display log message.
|
||||||
|
"""
|
||||||
use_markup = (
|
use_markup = (
|
||||||
getattr(record, "markup") if hasattr(record, "markup") else self.markup
|
getattr(record, "markup") if hasattr(record, "markup") else self.markup
|
||||||
)
|
)
|
||||||
if use_markup:
|
message_text = Text.from_markup(message) if use_markup else Text(message)
|
||||||
message_text = Text.from_markup(message)
|
|
||||||
else:
|
|
||||||
message_text = Text(message)
|
|
||||||
|
|
||||||
if self.highlighter:
|
if self.highlighter:
|
||||||
message_text = self.highlighter(message_text)
|
message_text = self.highlighter(message_text)
|
||||||
if self.KEYWORDS:
|
if self.KEYWORDS:
|
||||||
message_text.highlight_words(self.KEYWORDS, "logging.keyword")
|
message_text.highlight_words(self.KEYWORDS, "logging.keyword")
|
||||||
|
|
||||||
self.console.print(
|
return message_text
|
||||||
self._log_render(
|
|
||||||
self.console,
|
def render(
|
||||||
[message_text] if not traceback else [message_text, traceback],
|
self,
|
||||||
log_time=log_time,
|
*,
|
||||||
time_format=time_format,
|
record: LogRecord,
|
||||||
level=level,
|
traceback: Optional[Traceback],
|
||||||
path=path,
|
message_renderable: "ConsoleRenderable",
|
||||||
line_no=record.lineno,
|
) -> "ConsoleRenderable":
|
||||||
link_path=record.pathname if self.enable_link_path else None,
|
"""Render log for display.
|
||||||
)
|
|
||||||
|
Args:
|
||||||
|
record (LogRecord): logging Record.
|
||||||
|
traceback (Optional[Traceback]): Traceback instance or None for no Traceback.
|
||||||
|
message_renderable (ConsoleRenderable): Renderable (typically Text) containing log message contents.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
ConsoleRenderable: Renderable to display log.
|
||||||
|
"""
|
||||||
|
path = Path(record.pathname).name
|
||||||
|
level = self.get_level_text(record)
|
||||||
|
time_format = None if self.formatter is None else self.formatter.datefmt
|
||||||
|
log_time = datetime.fromtimestamp(record.created)
|
||||||
|
|
||||||
|
log_renderable = self._log_render(
|
||||||
|
self.console,
|
||||||
|
[message_renderable] if not traceback else [message_renderable, traceback],
|
||||||
|
log_time=log_time,
|
||||||
|
time_format=time_format,
|
||||||
|
level=level,
|
||||||
|
path=path,
|
||||||
|
line_no=record.lineno,
|
||||||
|
link_path=record.pathname if self.enable_link_path else None,
|
||||||
)
|
)
|
||||||
|
return log_renderable
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__": # pragma: no cover
|
if __name__ == "__main__": # pragma: no cover
|
||||||
|
|
Loading…
Reference in New Issue