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/),
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
### Changed

View File

@ -2,11 +2,12 @@ import logging
from datetime import datetime
from logging import Handler, LogRecord
from pathlib import Path
from typing import List
from . import get_console
from rich._log_render import LogRender
from rich.console import Console
from rich.highlighter import ReprHighlighter
from rich.highlighter import Highlighter, ReprHighlighter
from rich.markup import render
from rich.text import Text
@ -24,11 +25,18 @@ class RichHandler(Handler):
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)
self.console = console or get_console()
self.highlighter = ReprHighlighter()
self.highlighter = highlighter or ReprHighlighter()
self._log_render = LogRender(show_level=True)
self.keywords = self.KEYWORDS if keywords is None else keywords
def emit(self, record: LogRecord) -> None:
"""Invoked by logging."""
@ -41,7 +49,7 @@ class RichHandler(Handler):
level = Text()
level.append(record.levelname, log_style)
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)
self.console.print(

View File

@ -5,7 +5,9 @@ from rich.console import Console
from rich.logging import 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(
level="NOTSET", format="%(message)s", datefmt="[DATE]", handlers=[handler]
@ -22,7 +24,7 @@ def make_log():
def test_log():
render = make_log()
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