|
1 | 1 | import asyncio
|
2 | 2 | import importlib
|
3 | 3 | import inspect
|
| 4 | +import logging |
| 5 | +import os |
| 6 | +import os.path as osp |
4 | 7 | import sys
|
| 8 | +import time |
5 | 9 | from functools import partial
|
| 10 | +from logging.handlers import RotatingFileHandler |
6 | 11 | from typing import Any, Dict, Generator, Iterable, List, Optional, Union
|
7 | 12 |
|
8 | 13 |
|
@@ -87,6 +92,41 @@ def filter_suffix(response: Union[str, List[str]],
|
87 | 92 | return processed
|
88 | 93 |
|
89 | 94 |
|
| 95 | +def get_logger( |
| 96 | + name: str = 'lagent', |
| 97 | + level: str = 'debug', |
| 98 | + fmt: |
| 99 | + str = '%(asctime)s %(levelname)8s %(filename)20s %(lineno)4s - %(message)s', |
| 100 | + add_file_handler: bool = False, |
| 101 | + log_dir: str = 'log', |
| 102 | + log_file: str = time.strftime('%Y-%m-%d.log', time.localtime()), |
| 103 | + max_bytes: int = 5 * 1024 * 1024, |
| 104 | + backup_count: int = 3, |
| 105 | +): |
| 106 | + logger = logging.getLogger(name) |
| 107 | + logger.propagate = False |
| 108 | + logger.setLevel(getattr(logging, level.upper(), logging.DEBUG)) |
| 109 | + |
| 110 | + formatter = logging.Formatter(fmt) |
| 111 | + console_handler = logging.StreamHandler() |
| 112 | + console_handler.setFormatter(formatter) |
| 113 | + logger.addHandler(console_handler) |
| 114 | + |
| 115 | + if add_file_handler: |
| 116 | + if not osp.exists(log_dir): |
| 117 | + os.makedirs(log_dir) |
| 118 | + log_file_path = osp.join(log_dir, log_file) |
| 119 | + file_handler = RotatingFileHandler( |
| 120 | + log_file_path, |
| 121 | + maxBytes=max_bytes, |
| 122 | + backupCount=backup_count, |
| 123 | + encoding='utf-8') |
| 124 | + file_handler.setFormatter(formatter) |
| 125 | + logger.addHandler(file_handler) |
| 126 | + |
| 127 | + return logger |
| 128 | + |
| 129 | + |
90 | 130 | class GeneratorWithReturn:
|
91 | 131 | """Generator wrapper to capture the return value."""
|
92 | 132 |
|
|
0 commit comments