edit : 기본 rest서버구조 추가
This commit is contained in:
116
custom_logger/custom_log.py
Normal file
116
custom_logger/custom_log.py
Normal file
@@ -0,0 +1,116 @@
|
||||
# -*- 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 = 'dk'
|
||||
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()
|
||||
Reference in New Issue
Block a user