返回 douyin-downloader
logger.py
根目录 / utils / logger.py
1 import logging
2 import sys
3 from pathlib import Path
4
5 _APP_LOGGER_PREFIX = "dy-downloader"
6 _KNOWN_LOGGER_NAMES = set()
7
8
9 def setup_logger(
10 name: str = "dy-downloader",
11 level: int = logging.INFO,
12 log_file: str = None,
13 console_level: int = logging.ERROR,
14 ) -> logging.Logger:
15 logger = logging.getLogger(name)
16 logger.setLevel(level)
17 logger.propagate = False
18 _KNOWN_LOGGER_NAMES.add(name)
19
20 if logger.handlers:
21 return logger
22
23 formatter = logging.Formatter(
24 "%(asctime)s - %(name)s - %(levelname)s - %(message)s",
25 datefmt="%Y-%m-%d %H:%M:%S",
26 )
27
28 console_handler = logging.StreamHandler(sys.stderr)
29 console_handler.setLevel(console_level)
30 console_handler.setFormatter(formatter)
31 logger.addHandler(console_handler)
32
33 if log_file:
34 log_path = Path(log_file)
35 if log_path.parent != Path("."):
36 log_path.parent.mkdir(parents=True, exist_ok=True)
37 file_handler = logging.FileHandler(log_file, encoding="utf-8")
38 file_handler.setLevel(level)
39 file_handler.setFormatter(formatter)
40 logger.addHandler(file_handler)
41
42 return logger
43
44
45 def set_console_log_level(level: int) -> None:
46 for name in _KNOWN_LOGGER_NAMES:
47 logger = logging.getLogger(name)
48 for handler in logger.handlers:
49 if isinstance(handler, logging.StreamHandler) and not isinstance(
50 handler, logging.FileHandler
51 ):
52 handler.setLevel(level)
53
53 lines PYTHON