(logger_name, logger_filename)
| 23 | |
| 24 | |
| 25 | def build_logger(logger_name, logger_filename): |
| 26 | global handler |
| 27 | |
| 28 | formatter = logging.Formatter( |
| 29 | fmt="%(asctime)s | %(levelname)s | %(name)s | %(message)s", |
| 30 | datefmt="%Y-%m-%d %H:%M:%S", |
| 31 | ) |
| 32 | |
| 33 | # Set the format of root handlers |
| 34 | if not logging.getLogger().handlers: |
| 35 | if sys.version_info[1] >= 9: |
| 36 | # This is for windows |
| 37 | logging.basicConfig(level=logging.INFO, encoding="utf-8") |
| 38 | else: |
| 39 | if platform.system() == "Windows": |
| 40 | warnings.warn( |
| 41 | "If you are running on Windows, " |
| 42 | "we recommend you use Python >= 3.9 for UTF-8 encoding." |
| 43 | ) |
| 44 | logging.basicConfig(level=logging.INFO) |
| 45 | logging.getLogger().handlers[0].setFormatter(formatter) |
| 46 | |
| 47 | # Redirect stdout and stderr to loggers |
| 48 | stdout_logger = logging.getLogger("stdout") |
| 49 | stdout_logger.setLevel(logging.INFO) |
| 50 | sl = StreamToLogger(stdout_logger, logging.INFO) |
| 51 | sys.stdout = sl |
| 52 | |
| 53 | stderr_logger = logging.getLogger("stderr") |
| 54 | stderr_logger.setLevel(logging.ERROR) |
| 55 | sl = StreamToLogger(stderr_logger, logging.ERROR) |
| 56 | sys.stderr = sl |
| 57 | |
| 58 | # Get logger |
| 59 | logger = logging.getLogger(logger_name) |
| 60 | logger.setLevel(logging.INFO) |
| 61 | |
| 62 | # Avoid httpx flooding POST logs |
| 63 | logging.getLogger("httpx").setLevel(logging.WARNING) |
| 64 | |
| 65 | # if LOGDIR is empty, then don't try output log to local file |
| 66 | if LOGDIR != "": |
| 67 | os.makedirs(LOGDIR, exist_ok=True) |
| 68 | filename = os.path.join(LOGDIR, logger_filename) |
| 69 | handler = logging.handlers.TimedRotatingFileHandler( |
| 70 | filename, when="D", utc=True, encoding="utf-8" |
| 71 | ) |
| 72 | handler.setFormatter(formatter) |
| 73 | |
| 74 | for l in [stdout_logger, stderr_logger, logger]: |
| 75 | if l in visited_loggers: |
| 76 | continue |
| 77 | visited_loggers.add(l) |
| 78 | l.addHandler(handler) |
| 79 | |
| 80 | return logger |
| 81 | |
| 82 |
no test coverage detected
searching dependent graphs…