Return a logger object with specified name. Parameters: name (str): The name of the logger. generate_log_files (bool): Whether to generate log files. file_level (int): The log level to use. console_level (int): The log level to use.
(cls, name, generate_log_files=True, file_level=logging.INFO, console_level=logging.INFO)
| 7 | |
| 8 | @classmethod |
| 9 | def get_logger(cls, name, generate_log_files=True, file_level=logging.INFO, console_level=logging.INFO): |
| 10 | """ |
| 11 | Return a logger object with specified name. |
| 12 | |
| 13 | Parameters: |
| 14 | name (str): The name of the logger. |
| 15 | generate_log_files (bool): Whether to generate log files. |
| 16 | file_level (int): The log level to use. |
| 17 | console_level (int): The log level to use. |
| 18 | |
| 19 | Returns: |
| 20 | logging.Logger: The logger object. |
| 21 | |
| 22 | Note: |
| 23 | This method sets up the logger to handle all messages of DEBUG level and above. |
| 24 | It adds a file handler to write log messages to a file specified by 'log_file_path' and a stream handler |
| 25 | to output log messages to the console. The log file is overwritten on each run. |
| 26 | |
| 27 | Example: |
| 28 | logger = CustomLogger.get_logger('my_logger') |
| 29 | logger.debug('This is a debug message') |
| 30 | logger.info('This is an info message') |
| 31 | logger.warning('This is a warning message') |
| 32 | logger.error('This is an error message') |
| 33 | logger.critical('This is a critical message') |
| 34 | """ |
| 35 | logger = logging.getLogger(name) |
| 36 | logger.setLevel(logging.DEBUG) |
| 37 | |
| 38 | # Check if handlers are already set up to avoid adding them multiple times |
| 39 | if not logger.handlers: |
| 40 | formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") |
| 41 | |
| 42 | # Only add file handler if file generation is enabled |
| 43 | if generate_log_files: |
| 44 | # Specify the log file path |
| 45 | log_file_path = get_settings().get("default").get("log_file_path", "run.log") |
| 46 | |
| 47 | # File handler for writing to a file. Use 'w' to overwrite the log file on each run |
| 48 | file_handler = logging.FileHandler(log_file_path, mode="w") |
| 49 | file_handler.setLevel(file_level) |
| 50 | file_handler.setFormatter(formatter) |
| 51 | logger.addHandler(file_handler) |
| 52 | |
| 53 | # Stream handler for output to the console |
| 54 | stream_handler = logging.StreamHandler() |
| 55 | stream_handler.setLevel(console_level) |
| 56 | stream_handler.setFormatter(formatter) |
| 57 | logger.addHandler(stream_handler) |
| 58 | |
| 59 | # Prevent log messages from being propagated to the root logger |
| 60 | logger.propagate = False |
| 61 | |
| 62 | return logger |