my_logger.py
import os
import logging
from logging.handlers import RotatingFileHandler
class ImmediateFlushHandler(RotatingFileHandler):
def emit(self, log):
super().emit(log)
self.flush()
class MyLoggingHelper():
def __init__(self, root_path: str):
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# console handler
#self.ch = logging.StreamHandler()
#self.ch.setLevel(logging.INFO)
# rotating file handler
log_file_path = os.path.join(root_path, 'logs', 'app.log')
os.makedirs(os.path.dirname(log_file_path), exist_ok=True)
self.fh = ImmediateFlushHandler(log_file_path, maxBytes=1024*1024*10, backupCount=2)
self.fh.setLevel(logging.INFO)
# formatter
formatter = logging.Formatter('%(asctime)s [%(thread)d] [%(levelname)s] %(message)s')
#self.ch.setFormatter(formatter)
self.fh.setFormatter(formatter)
# attach handler
#logger.addHandler(self.ch)
logger.addHandler(self.fh)
def setLevel(self, level: str):
level = level.upper()
new_level = logging.INFO
if level == "DEBUG":
new_level = logging.DEBUG
elif level == "INFO":
new_level = logging.INFO
elif level == "WARN":
new_level = logging.WARN
elif level == "ERROR":
new_level = logging.ERROR
elif level == "CRITICAL":
new_level = logging.CRITICAL
logger = logging.getLogger()
logger.setLevel(new_level)
self.ch.setLevel(new_level)
self.fh.setLevel(new_level)
def getLogger(self):
logger = logging.getLogger()
return logger
if __name__ == "__main__":
logging_helper = MyLoggingHelper(root_path = "./")
logger = logging_helper.getLogger()
while True:
logger.info("TEST")'Software Engineering > Python' 카테고리의 다른 글
| poetry 사용법 정리 (2) | 2024.07.02 |
|---|---|
| windows 환경에서 poetry 설치하기 (0) | 2024.07.02 |
| sample project 연습 (1) | 2024.06.20 |
| timer 유틸리티 클래스 (0) | 2024.06.19 |
| pydantic을 사용하여 환경변수 로딩하기 (1) | 2024.06.09 |