Python 로그 모듈

목차
  • 소개
  • 쾌속 사용
  • 기본 사용
  • 패키지 로그 도구 류
  • 부록
  • 포맷 설명
  • 소개 하 다.
    logging 모듈 은 Python 에 내 장 된 표준 모듈 로 실행 로 그 를 입력 하 는 데 사 용 됩 니 다.출력 로그 의 등급,로그 저장 경로 등 을 설정 할 수 있 습 니 다.
    빠 른 사용
    #   logging 
    import logging
    #       
    logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    #        
    logger = logging.getLogger("  V1")
    #          
    # info
    logger.info("    info   ")
    
    #debug
    logger.debug("    debug   ")
    
    # warning
    logger.warning("    warning   ")
    

    기본 사용
    로그 출력 콘 솔 이나 파일
    import logging
    
    # 1.  logger  
    logger =logging.getLogger("log_file")
    # 2.  log  
    logger.setLevel(logging.INFO)
    # 3.  handler,              
    fh_stream = logging.StreamHandler()  #     handler
    fh_file = logging.FileHandler("test.log", encoding="utf8")  #      handler
    
    # 4.                 
    fh_stream.setLevel(logging.WARNING)  #         
    fh_file.setLevel(logging.DEBUG)  #          
    
    # 5.  handler     
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh_stream.setFormatter(formatter)  #         
    fh_file.setFormatter(formatter)  #          
    
    # 6.  handler
    logger.addHandler(fh_stream)
    logger.addHandler(fh_file)
    
    # 7.    
    logger.info("  info   ")
    logger.debug("  debug   ")
    logger.warning("  warning   ")
    
  • 마지막 으로 로그 의 최대 단 계 를 INFO 로 제 한 했 기 때문에 debug 의 정 보 는 콘 솔 이나 파일 에 출력 되 지 않 습 니 다
  • 마찬가지 로 콘 솔 의 로그 등급logger.setLevel(logging.INFO)이 warning 으로 설정 되 어 있 기 때문에 info 등급 의 로 그 는 콘 솔
  • 에 출력 되 지 않 습 니 다.
  • 로그 단계 정렬:fh_stream.setLevel(logging.WARNING)
  • 패키지 로그 도구 클래스
    import logging
    import datetime
    import os
    
    #          
    log_l = {
        "info": logging.INFO,
        "debug": logging.DEBUG,
        "warning": logging.WARNING,
        "error": logging.ERROR
    }
    
    
    # 1.    
    class Logger:
        # 2.     :          test.log, logger  ,        
        def __init__(self, log_file, log_name, log_level):
            self.logger = logging.getLogger(log_name)  #   logger  
            self.logger.setLevel(log_l[log_level])  #             
    
            # 3.      handler
            if not self.logger.handlers:  #        handler,       handler
                fh_stream = logging.StreamHandler()
                fh_stream.setLevel(log_l[log_level])
                formatter = logging.Formatter('%(asctime)s - %(name)s -%(lineno)s - %(levelname)s - %(message)s')
                fh_stream.setFormatter(formatter)
                self.logger.addHandler(fh_stream)
            # 4.         handler
                fh_file = logging.FileHandler(log_file)
                fh_file.setLevel(log_l[log_level])
                fh_file.setFormatter(formatter)
                self.logger.addHandler(fh_file)
    
    
    #   logs  
    log_path = os.path.dirname(__file__)  #       
    log_path = log_path + os.path.sep + "logs"  #   logs  
    current_data = datetime.datetime.now().strftime("%Y-%m-%d")  #        
    log_file = os.path.join(log_path, current_data + ".log")  #        
    # print(log_file)
    
    #       
    loglevel = "info"
    
    
    #    log   ,         
    def my_log(log_name=__file__):
        return Logger(log_file, log_name, loglevel).logger
    
    
    if __name__ == '__main__':
        log = my_log("           ")
        log.info("    info  ")
    

    부록
    Format 형식 설명
  • Debug>Info>Warning>Error>Critical:로 그 를 인쇄 하 는 시간
  • %(asctime)s:로 거 이름 인쇄
  • %(name)s:로그 등급 이름 인쇄
  • %(levelname)s:로그 정보 인쇄
  • %(message)s:인쇄 로그 등급 의 수치
  • %(levelno)s:현재 실행 프로그램의 경 로 를 인쇄 하 는 것 은 바로 sys.argv[0]
  • %(pathname)s:현재 실행 중인 프로그램 이름 인쇄
  • %(filename)s:로 그 를 인쇄 하 는 현재 함수
  • %(funcName)s:로 그 를 인쇄 하 는 현재 줄 번호
  • %(lineno)s:인쇄 스 레 드 ID
  • %(thread)s:인쇄 스 레 드 이름
  • %(threadName)s:프로 세 스 ID 인쇄
  • 좋은 웹페이지 즐겨찾기