Python: 여러 모듈에서 로깅

안녕, 직장에서 내 작업 중 하나에서 나는 내 응용 프로그램의 하나의 기본 모듈이 있고 응용 프로그램이 성공 또는 실패를 기록하는 역할을 하는 여러 모듈을 포함하는 시스템을 설계하고 있었습니다.

그러나 그 당시에는 파이썬이 여러 모듈에서 생성된 메시지를 기본 모듈에서 시작된 동일한 로거 개체에 기록하도록 하는 방법을 몰랐습니다. 따라서 이 게시물.

애플리케이션이 아래와 같다고 가정해 보겠습니다.

기본 애플리케이션 파일은 다음과 같아야 합니다.

import logging
#Function to initialize the logger, notice that it takes 2 arguments
#logger_name and logfile
def setup_logger(logger_name,logfile):
                logger = logging.getLogger(logger_name)
                logger.setLevel(logging.INFO)
                # create file handler which logs even debug messages
                fh = logging.FileHandler(logfile)
                fh.setLevel(logging.INFO)
                # create console handler with a higher log level
                ch = logging.StreamHandler()
                ch.setLevel(logging.INFO)
                # create formatter and add it to the handlers
                formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
                fh.setFormatter(formatter)
                ch.setFormatter(formatter)
                # add the handlers to the logger
                logger.addHandler(fh)
                logger.addHandler(ch)
                return logger
#setup the logger as below with mylogger being the name of the #logger and myloggerfile.log being the name of the logfile
mylogger=setup_logger('mylogger','myloggerfile.log')
mylogger.info("My Logger has been initialized")
##########Very important to import the module after the logger has #been created, if the module is imported before setting up the #logger the module wont log to the desired file
import mymodule
#Then you can continue the rest of the code.


모듈 파일은 아래와 같아야 합니다.

import logging
hostlogger = logging.getLogger('mylogger.module')
hostlogger.info("Logger has been initialised in the host module")


이렇게 하면 애플리케이션 모듈의 로그를 아래와 같이 단일 공통 파일로 가져오는 데 도움이 됩니다.

# cat myloggerfile.log
2022-05-05 17:06:10,024 - mylogger - INFO - My Logger has been initialized
2022-05-05 17:06:10,028 - mylogger.module - INFO - Logger has been initialised in the host module



로거 객체의 이름, mylogger 태그가 있는 메시지는 주 응용 프로그램에서 오고 mylogger.module 메시지는 모듈에서 옵니다.

이것은 또한 여러 파일에 기록하도록 조정할 수 있으며 기본 응용 프로그램 파일에 여러 로거 개체를 생성하고 모듈은 그에 따라 이를 참조할 수 있습니다.

좋은 웹페이지 즐겨찾기