Skip to content

Commit 6d22862

Browse files
Merge pull request #55 from open-sciencelab/rich-logger
feat: add log RichHandler & RotatingFileHandler
2 parents 54a578b + 7b8025d commit 6d22862

File tree

2 files changed

+42
-19
lines changed

2 files changed

+42
-19
lines changed

graphgen/generate.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def main():
6565
"GraphGen with unique ID %s logging to %s",
6666
unique_id,
6767
os.path.join(
68-
working_dir, "logs", f"graphgen_{output_data_type}_{unique_id}.log"
68+
working_dir, "logs", f"{unique_id}_graphgen_{output_data_type}.log"
6969
),
7070
)
7171

graphgen/utils/log.py

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,55 @@
11
import logging
2+
from logging.handlers import RotatingFileHandler
3+
4+
from rich.logging import RichHandler
25

36
logger = logging.getLogger("graphgen")
47

5-
def set_logger(log_file: str, log_level: int = logging.INFO, if_stream: bool = True):
6-
logger.setLevel(log_level)
78

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+
):
1118

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
1521

16-
stream_handler = None
22+
if force:
23+
logger.handlers.clear()
1724

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
2227

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)
2750

2851

2952
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:
3154
lines = f.readlines()
3255
return lines

0 commit comments

Comments
 (0)