Source code for grader.utils.logger

"""
Module containing the logger setup function and the custom VERBOSE level.
"""

import logging
import sys

from typing import Optional

VERBOSE = 15
logging.addLevelName(VERBOSE, "VERBOSE")


[docs] def setup_logger(student_id: Optional[str] = None, verbosity: int = 0) -> logging.Logger: """ Setup the logger with the given verbosity level and student id Args: student_id: The id of the student. Defaults to None. verbosity: . Defaults to 0. Returns: logging.Logger: The configured logger object. """ student_id = student_id or "grader" logger = logging.getLogger("grader") logger.setLevel(logging.DEBUG) # Set the logger to the lowest level to capture all messages match verbosity: case 0: console_level = logging.INFO case 1: console_level = VERBOSE case 2: console_level = logging.DEBUG case _: console_level = logging.DEBUG if verbosity > 0: console_format = "%(asctime)s - %(levelname)s - %(message)s" else: console_format = "%(message)s" file_format = "%(asctime)s - %(levelname)s - %(message)s" console_handler = logging.StreamHandler(stream=sys.stdout) # Change to stdout console_handler.setLevel(console_level) console_handler.setFormatter(logging.Formatter(console_format)) file_handler = logging.FileHandler(student_id + ".log") file_handler.setLevel(logging.DEBUG) file_handler.setFormatter(logging.Formatter(file_format)) logger.addHandler(console_handler) logger.addHandler(file_handler) return logger