Files
GLASSES_AI_SERVER/custom_logger/custom_log.py

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()