# -*- coding: utf-8 -*- """ @file : custom_log.py @author: hsj100 @license: A2TEC @brief: @section Modify History - 2024-05-08 오후 2:33 hsj100 base """ # import ai_config import datetime import os import logging from custom_logger.colorlog.colorlog import ColoredFormatter custom_logger = None _now = datetime.datetime.now() LOGGER_NAME = 'fermat' LOGGER_LEVEL = logging.INFO LOGGER_DIR = "log/" LOGGER_FILE_NAME = f'{_now.strftime("%Y-%m-%d %H_%M_%S")}_{LOGGER_NAME}.log' __LOGGER_FILE_PATH = LOGGER_DIR + LOGGER_FILE_NAME # __LOGGER_FILE_PATH = None def logger_init(logger, level=logging.DEBUG, # color_log_format = "%(log_color)s%(levelname)s [%(asctime)s] [%(module)s::%(funcName)s()] %(message)s", color_log_format='%(log_color)s%(levelname)s: [%(module)s::%(funcName)s()] %(message)s', file_log_path=None, file_log_format='[%(levelname)s][%(asctime)s][%(module)s::%(funcName)s()] %(message)s'): """ 로그 정보 초기화 :param logger: 로거 객체 :param level: 스트림 로그 출력 레벨 (지정 레벨 이상의 로그 정보만 출력됨) :param color_log_format: 스트림 로그 출력 형식 :param file_log_path: 파일 로그 저장 경로 (경로 지정이 없을 경우에는 파일로그는 기록되지 않음) :param file_log_format: 파일 로그 출력 형식 :return: """ # stream handler color_stream_handler = logging.StreamHandler() color_stream_handler.setLevel(level) formatter = ColoredFormatter( color_log_format, datefmt=None, reset=True, log_colors={ 'DEBUG': 'cyan', 'INFO': 'white,bold', 'INFOV': 'cyan,bold', 'WARNING': 'yellow', 'ERROR': 'red,bold', 'CRITICAL': 'red,bg_white', }, secondary_log_colors={}, style='%' ) color_stream_handler.setFormatter(formatter) logger.setLevel(level) logger.handlers = [] # No duplicated handlers logger.propagate = False # workaround for duplicated logs in ipython logger.addHandler(color_stream_handler) logging.addLevelName(logging.INFO + 1, 'INFOV') # file handler if file_log_path: file_handler = logging.FileHandler(file_log_path) formatter = logging.Formatter(file_log_format) file_handler.setFormatter(formatter) logger.addHandler(file_handler) # def _infov(self, msg, *args, **kwargs): # self.log(logging.INFO + 1, msg, *args, **kwargs) def get_logger(): """ 로거 객체 반환 로거 객체가 없을 경우에는 로그 초기화를 진행하고 생성된 로그 객체를 반환함 :return: 로그 객체 """ if not custom_logger.handlers: logger_init(custom_logger) return custom_logger # if custom_logger is None: # custom_logger = logging.getLogger(LOGGER_NAME) # if not os.path.exists(LOGGER_DIR): # os.makedirs(LOGGER_DIR) # if not __LOGGER_FILE_PATH: # logger_init(custom_logger, level=LOGGER_LEVEL) # else: # if not os.path.exists(LOGGER_DIR): # os.makedirs(LOGGER_DIR) # logger_init(custom_logger, level=LOGGER_LEVEL, file_log_path=__LOGGER_FILE_PATH) def test(): custom_logger.info('Module: custom_log.py') if __name__ == '__main__': test()