1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
import io
import sys
import os
import logging
import pytest
from rich.console import Console
from rich.logging import RichHandler
handler = RichHandler(
console=Console(
file=io.StringIO(), force_terminal=True, width=80, color_system="truecolor"
),
enable_link_path=False,
)
logging.basicConfig(
level="NOTSET", format="%(message)s", datefmt="[DATE]", handlers=[handler]
)
log = logging.getLogger("rich")
skip_win = pytest.mark.skipif(
os.name == "nt",
reason="rendered differently on windows",
)
@skip_win
def test_exception():
console = Console(
file=io.StringIO(), force_terminal=True, width=140, color_system="truecolor"
)
handler_with_tracebacks = RichHandler(
console=console, enable_link_path=False, rich_tracebacks=True
)
log.addHandler(handler_with_tracebacks)
try:
1 / 0
except ZeroDivisionError:
log.exception("message")
render = handler_with_tracebacks.console.file.getvalue()
print(render)
assert "ZeroDivisionError" in render
assert "message" in render
assert "division by zero" in render
def test_exception_with_extra_lines():
console = Console(
file=io.StringIO(), force_terminal=True, width=140, color_system="truecolor"
)
handler_extra_lines = RichHandler(
console=console,
enable_link_path=False,
markup=True,
rich_tracebacks=True,
tracebacks_extra_lines=5,
)
log.addHandler(handler_extra_lines)
try:
1 / 0
except ZeroDivisionError:
log.exception("message")
render = handler_extra_lines.console.file.getvalue()
print(render)
assert "ZeroDivisionError" in render
assert "message" in render
assert "division by zero" in render
if __name__ == "__main__":
render = make_log()
print(render)
print(repr(render))
|