(logger_name, logger_filename)
| 17 | |
| 18 | |
| 19 | def build_logger(logger_name, logger_filename): |
| 20 | global handler |
| 21 | |
| 22 | formatter = logging.Formatter( |
| 23 | fmt="%(asctime)s | %(levelname)s | %(name)s | %(message)s", |
| 24 | datefmt="%Y-%m-%d %H:%M:%S", |
| 25 | ) |
| 26 | |
| 27 | # Set the format of root handlers |
| 28 | if not logging.getLogger().handlers: |
| 29 | if sys.version_info[1] >= 9: |
| 30 | # This is for windows |
| 31 | logging.basicConfig(level=logging.INFO, encoding="utf-8") |
| 32 | else: |
| 33 | if platform.system() == "Windows": |
| 34 | warnings.warn( |
| 35 | "If you are running on Windows, " |
| 36 | "we recommend you use Python >= 3.9 for UTF-8 encoding." |
| 37 | ) |
| 38 | logging.basicConfig(level=logging.INFO) |
| 39 | logging.getLogger().handlers[0].setFormatter(formatter) |
| 40 | |
| 41 | # Redirect stdout and stderr to loggers |
| 42 | stdout_logger = logging.getLogger("stdout") |
| 43 | stdout_logger.setLevel(logging.INFO) |
| 44 | sl = StreamToLogger(stdout_logger, logging.INFO) |
| 45 | sys.stdout = sl |
| 46 | |
| 47 | stderr_logger = logging.getLogger("stderr") |
| 48 | stderr_logger.setLevel(logging.ERROR) |
| 49 | sl = StreamToLogger(stderr_logger, logging.ERROR) |
| 50 | sys.stderr = sl |
| 51 | |
| 52 | # Get logger |
| 53 | logger = logging.getLogger(logger_name) |
| 54 | logger.setLevel(logging.INFO) |
| 55 | |
| 56 | # Add a file handler for all loggers |
| 57 | if handler is None: |
| 58 | os.makedirs(LOGDIR, exist_ok=True) |
| 59 | filename = os.path.join(LOGDIR, logger_filename) |
| 60 | handler = logging.handlers.TimedRotatingFileHandler( |
| 61 | filename, when="D", utc=True, encoding="utf-8" |
| 62 | ) |
| 63 | handler.setFormatter(formatter) |
| 64 | |
| 65 | for name, item in logging.root.manager.loggerDict.items(): |
| 66 | if isinstance(item, logging.Logger): |
| 67 | item.addHandler(handler) |
| 68 | |
| 69 | return logger |
| 70 | |
| 71 | |
| 72 | class StreamToLogger(object): |
nothing calls this directly
no test coverage detected