116 lines
3.3 KiB
Python
116 lines
3.3 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
@file : custom_log.py
|
|
@author: hsj100
|
|
@license: DAOOLDNS
|
|
@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() |