This commit is contained in:
Will McGugan 2020-06-14 15:23:43 +01:00
parent 911d305fe7
commit 93f917493c
3 changed files with 22 additions and 6 deletions

View File

@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [2.2.2] - Unreleased
### Changed
- Extra paramters added to RichLogging
## [2.2.1] - 2020-06-14 ## [2.2.1] - 2020-06-14
### Changed ### Changed

View File

@ -2,11 +2,12 @@ import logging
from datetime import datetime from datetime import datetime
from logging import Handler, LogRecord from logging import Handler, LogRecord
from pathlib import Path from pathlib import Path
from typing import List
from . import get_console from . import get_console
from rich._log_render import LogRender from rich._log_render import LogRender
from rich.console import Console from rich.console import Console
from rich.highlighter import ReprHighlighter from rich.highlighter import Highlighter, ReprHighlighter
from rich.markup import render from rich.markup import render
from rich.text import Text from rich.text import Text
@ -24,11 +25,18 @@ class RichHandler(Handler):
KEYWORDS = ["GET", "POST", "HEAD", "PUT", "DELETE", "OPTIONS", "TRACE", "PATCH"] KEYWORDS = ["GET", "POST", "HEAD", "PUT", "DELETE", "OPTIONS", "TRACE", "PATCH"]
def __init__(self, level: int = logging.NOTSET, console: Console = None) -> None: def __init__(
self,
level: int = logging.NOTSET,
console: Console = None,
highlighter: Highlighter = None,
keywords: List[str] = None,
) -> None:
super().__init__(level=level) super().__init__(level=level)
self.console = console or get_console() self.console = console or get_console()
self.highlighter = ReprHighlighter() self.highlighter = highlighter or ReprHighlighter()
self._log_render = LogRender(show_level=True) self._log_render = LogRender(show_level=True)
self.keywords = self.KEYWORDS if keywords is None else keywords
def emit(self, record: LogRecord) -> None: def emit(self, record: LogRecord) -> None:
"""Invoked by logging.""" """Invoked by logging."""
@ -41,7 +49,7 @@ class RichHandler(Handler):
level = Text() level = Text()
level.append(record.levelname, log_style) level.append(record.levelname, log_style)
message_text = Text(message) message_text = Text(message)
message_text.highlight_words(self.KEYWORDS, "logging.keyword") message_text.highlight_words(self.keywords, "logging.keyword")
message_text = self.highlighter(message_text) message_text = self.highlighter(message_text)
self.console.print( self.console.print(

View File

@ -5,7 +5,9 @@ from rich.console import Console
from rich.logging import RichHandler from rich.logging import RichHandler
handler = RichHandler( handler = RichHandler(
console=Console(file=io.StringIO(), force_terminal=True, width=80) console=Console(
file=io.StringIO(), force_terminal=True, width=80, color_system="truecolor"
)
) )
logging.basicConfig( logging.basicConfig(
level="NOTSET", format="%(message)s", datefmt="[DATE]", handlers=[handler] level="NOTSET", format="%(message)s", datefmt="[DATE]", handlers=[handler]
@ -22,7 +24,7 @@ def make_log():
def test_log(): def test_log():
render = make_log() render = make_log()
print(repr(render)) print(repr(render))
expected = "\x1b[2;36m[DATE]\x1b[0m\x1b[2;36m \x1b[0m\x1b[32mDEBUG\x1b[0m foo \x1b]8;id=3292318898;file:///Users/willmcgugan/projects/rich/tests/test_logging.py\x1b\\\x1b[2mtest_logging.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:17\x1b[0m\n" expected = "\x1b[2;36m[DATE]\x1b[0m\x1b[2;36m \x1b[0m\x1b[32mDEBUG\x1b[0m foo \x1b]8;id=3292318898;file:///Users/willmcgugan/projects/rich/tests/test_logging.py\x1b\\\x1b[2mtest_logging.py\x1b[0m\x1b]8;;\x1b\\\x1b[2m:19\x1b[0m\n"
assert render == expected assert render == expected