|
1 | 1 | import logging |
| 2 | +from logging.handlers import RotatingFileHandler |
| 3 | + |
| 4 | +from rich.logging import RichHandler |
2 | 5 |
|
3 | 6 | logger = logging.getLogger("graphgen") |
4 | 7 |
|
5 | | -def set_logger(log_file: str, log_level: int = logging.INFO, if_stream: bool = True): |
6 | | - logger.setLevel(log_level) |
7 | 8 |
|
8 | | - formatter = logging.Formatter( |
9 | | - "%(asctime)s - %(name)s - %(levelname)s - %(message)s" |
10 | | - ) |
| 9 | +def set_logger( |
| 10 | + log_file: str, |
| 11 | + log_level: int = logging.INFO, |
| 12 | + *, |
| 13 | + if_stream: bool = True, |
| 14 | + max_bytes: int = 50 * 1024 * 1024, # 50 MB |
| 15 | + backup_count: int = 5, |
| 16 | + force: bool = False, |
| 17 | +): |
11 | 18 |
|
12 | | - file_handler = logging.FileHandler(log_file, mode='w') |
13 | | - file_handler.setLevel(log_level) |
14 | | - file_handler.setFormatter(formatter) |
| 19 | + if logger.hasHandlers() and not force: |
| 20 | + return |
15 | 21 |
|
16 | | - stream_handler = None |
| 22 | + if force: |
| 23 | + logger.handlers.clear() |
17 | 24 |
|
18 | | - if if_stream: |
19 | | - stream_handler = logging.StreamHandler() |
20 | | - stream_handler.setLevel(log_level) |
21 | | - stream_handler.setFormatter(formatter) |
| 25 | + logger.setLevel(log_level) |
| 26 | + logger.propagate = False |
22 | 27 |
|
23 | | - if not logger.handlers: |
24 | | - logger.addHandler(file_handler) |
25 | | - if if_stream and stream_handler: |
26 | | - logger.addHandler(stream_handler) |
| 28 | + if logger.handlers: |
| 29 | + logger.handlers.clear() |
| 30 | + |
| 31 | + if if_stream: |
| 32 | + console = RichHandler(level=log_level, show_path=False, rich_tracebacks=True) |
| 33 | + console.setFormatter(logging.Formatter("%(message)s")) |
| 34 | + logger.addHandler(console) |
| 35 | + |
| 36 | + file_handler = RotatingFileHandler( |
| 37 | + log_file, |
| 38 | + maxBytes=max_bytes, |
| 39 | + backupCount=backup_count, |
| 40 | + encoding="utf-8", |
| 41 | + ) |
| 42 | + file_handler.setLevel(log_level) |
| 43 | + file_handler.setFormatter( |
| 44 | + logging.Formatter( |
| 45 | + "[%(asctime)s] %(levelname)s [%(name)s:%(filename)s:%(lineno)d] %(message)s", |
| 46 | + datefmt="%y-%m-%d %H:%M:%S", |
| 47 | + ) |
| 48 | + ) |
| 49 | + logger.addHandler(file_handler) |
27 | 50 |
|
28 | 51 |
|
29 | 52 | def parse_log(log_file: str): |
30 | | - with open(log_file, "r", encoding='utf-8') as f: |
| 53 | + with open(log_file, "r", encoding="utf-8") as f: |
31 | 54 | lines = f.readlines() |
32 | 55 | return lines |
0 commit comments