본문 바로가기

Software Engineering/Python

python logging 설정 예제

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