Source code for openddi.utils.logger

import sys
import os
import logging
import pprint
import time
from utils.config import LOG_PATH
[docs] class Logger(object): """ Custom logger class for handling both file and console logging. Args: filename (str): Path to the log file """
[docs] def __init__(self, filename): dir_name = os.path.dirname(filename) if not os.path.exists(dir_name): os.makedirs(dir_name) self.logger = logging.getLogger(filename) self.logger.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s.%(msecs)03d: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') # write into file fileHandler = logging.FileHandler(filename) fileHandler.setLevel(logging.DEBUG) fileHandler.setFormatter(formatter) # show on console consoleHandler = logging.StreamHandler(sys.stdout) consoleHandler.setLevel(logging.DEBUG) consoleHandler.setFormatter(formatter) # add to Handler self.logger.addHandler(fileHandler) self.logger.addHandler(consoleHandler)
def _flush(self): """ Flush all logger handlers to ensure all messages are written. """ for handler in self.logger.handlers: handler.flush()
[docs] def debug(self, message): """ Log debug level message. Args: message (str): Message to log """ self.logger.debug(message) self._flush()
[docs] def info(self, message): """ Log info level message. Args: message (str): Message to log """ self.logger.info(message) self._flush()
[docs] def warning(self, message): """ Log warning level message. Args: message (str): Message to log """ self.logger.warning(message) self._flush()
[docs] def error(self, message): """ Log error level message. Args: message (str): Message to log """ self.logger.error(message) self._flush()
[docs] def critical(self, message): """ Log critical level message. Args: message (str): Message to log """ self.logger.critical(message) self._flush()
[docs] def create_logger(args): """ Create and configure a logger instance with timestamp and model name. Args: args: Configuration arguments containing model information Returns: Logger: Configured logger instance """ timestamp = time.time() current_time_str = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime(timestamp)) model_name = args.model run_id = f"{timestamp:.8f}" log_dir = os.path.join(LOG_PATH , "log" , model_name) logger_name = os.path.join(log_dir, current_time_str + ".log") logger = Logger(logger_name) logger.info(f"my pid: {os.getpid()}") formatted_args = pprint.pformat(args) logger.info(formatted_args) return logger