|
1 | 1 | from loguru import logger
|
2 |
| -from rich.logging import RichHandler |
| 2 | +from rich.traceback import Traceback |
| 3 | +from rich.console import Console |
| 4 | +import io |
3 | 5 | import sys
|
4 | 6 |
|
5 | 7 |
|
6 |
| -# Configure Loguru logger |
| 8 | +def rich_formatter(record): |
| 9 | + """Rich formatter for loguru logger""" |
| 10 | + format_ = "<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>\n" |
| 11 | + if record["exception"] is not None: |
| 12 | + output = io.StringIO() |
| 13 | + console = Console(file=output, force_terminal=True) |
| 14 | + traceback = Traceback.from_exception(*record["exception"]) |
| 15 | + console.print(traceback) |
| 16 | + record["extra"]["rich_exception"] = output.getvalue() |
| 17 | + format_ += "{extra[rich_exception]}" |
| 18 | + return format_ |
| 19 | + |
| 20 | + |
7 | 21 | def setup_logger():
|
| 22 | + """Setup the logger configuration for the application""" |
| 23 | + |
8 | 24 | # Remove default logger configuration
|
9 | 25 | logger.remove()
|
10 | 26 |
|
11 | 27 | # Add a handler for console logging with rich formatting
|
12 |
| - logger.add( |
13 |
| - sys.stderr, format="{time} {level} {message}", level="INFO", colorize=True |
14 |
| - ) |
15 |
| - logger.configure( |
16 |
| - handlers=[ |
17 |
| - { |
18 |
| - "sink": RichHandler(markup=True), |
19 |
| - "format": " <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>", |
20 |
| - } |
21 |
| - ] |
22 |
| - ) |
| 28 | + logger.add(sys.stderr, format=rich_formatter, level="INFO", colorize=True) |
23 | 29 |
|
24 | 30 | # Add a handler for file logging
|
25 | 31 | logger.add("logs/app_{time}.log", rotation="1 week", level="DEBUG")
|
26 | 32 |
|
27 | 33 |
|
28 | 34 | setup_logger()
|
29 | 35 |
|
30 |
| -# Example logging |
31 |
| -logger.info("This is an informational message.") |
32 |
| -logger.debug("This is a debug message.") |
33 |
| -logger.error("This is an error message.") |
34 |
| -logger.warning("This is a warning message.") |
| 36 | +# Example log messages: |
| 37 | +# @logger.catch |
| 38 | +# def divide(a, b): |
| 39 | +# a / b |
| 40 | + |
| 41 | + |
| 42 | +# divide(1, 0) |
| 43 | + |
| 44 | +# logger.info("This is an info message") |
| 45 | +# logger.debug("This is a debug message") |
| 46 | +# logger.warning("This is a warning message") |
| 47 | +# logger.error("This is an error message") |
| 48 | +# logger.critical("This is a critical message") |
0 commit comments