python 콘 솔 인쇄 log 출력 중복 해결 방법

3995 단어 python콘 솔log
로그 모듈 출력 로 그 를 사용 할 때 로그 출력 이 중복 되 는 문제 가 자주 발생 합 니 다.다음 과 같 습 니 다.
먼저 이 파일 log.py 의 코드 를 보십시오.

    :
 
'''
    :                 
   :  
    :
    :
  1-         
  2-      
  3-      (      ,       )
  4-     handler-   
  5-     handler-  
  6-      logger
'''
 
import logging
import sys
 
 
def log():
   # 1 -          
   logger = logging.getLogger('AutoTest')
 
   # 2-      
   logger.setLevel(logging.DEBUG)
 
   # 3-      (      ,       )
   format = logging.Formatter('%(name)s-%(asctime)s-%(message)s')
 
   # 4 -      handler -    
   sh = logging.StreamHandler()
   sh.setFormatter(format)
   logger.addHandler(sh)
 
   # 5 -      handler -   
   fh = logging.FileHandler('test.log')
   fh.setFormatter(format)
   logger.addHandler(fh)
 
   # 6 -       logger
   return logger
 
if __name__ == '__main__':
   logger = log()
   logger.info('       log  ')
우 리 는 같은 디 렉 터 리 아래 에 다른 파일 을 만 듭 니 다.
작성 한 log.py 파일 가 져 오기

from xx   import log
 
 log().info('xxx1')
 
 log().info('xxx2')
 
 log().info('xxx3')
출력:

이거 결국 뭐야?분명히 세 마디 가 이렇게 많이 인쇄 되 었 는데 이것 은 로그 가 사용 하 는 자주 만 나 는 구덩이 입 니 다.debug 를 통 해 호출 할 때마다 핸들 을 만 드 는 것 을 발견 할 수 있 습 니 다.그래서 반복 합 니 다.그림 과 같 습 니 다.
첫 번 째 호출 이후 handlers 에는 두 개의 handler 가 존재 합 니 다.각각 콘 솔 핸들 StreamHandler 와 파일 핸들 FileHandler 입 니 다.아래 그림 은 두 번 째 호출 에 핸들 을 추가 합 니 다.

실행 하면 handlers 에 스 트림 Handler 가 하나 더 들 어 갔 어 요.

이런 상황 을 어떻게 해결 하 는 지,두 가지 방안 이 있 는데,우 리 는 각각 두 가지 방안 코드 를 열거 합 니 다.
첫 번 째,첫 번 째 는 단일 모드 를 사용 하여 log.py 파일 에 한 줄 을 추가 합 니 다:logger=log().이 문장의 역할 은 대상 을 미리 예화 하 는 것 입 니 다.다른 모듈 은 모두 이 대상 에 적용 되 기 때문에 다른 모듈 가 져 오기 문 구 는 from xxx 패키지.log import logger 로 바 꾼 다음 logger.info(xxxx)출력 로 그 를 사용 하면 됩 니 다.
   ……위쪽 코드 생략

     # 6 -       logg   
     return logger
 #    
 logger = log()
 
 if __name__ == '__main__':
     logger = log()
     logger.info('       log  ')
가 져 오기:

from xx  import logger
 
 
 logger.info('xxx1')
 
 logger.info('xxx2')
 
 logger.info('xxx3')
출력:

두 번 째 방안:log.py 는 handlers 가 존재 하 는 지 판단 할 때마다

 ……
     # 4 -      handler -    
     sh = logging.StreamHandler()
     sh.setFormatter(format)
 
     # 5 -      handler -   
     fh = logging.FileHandler('test.log')
     fh.setFormatter(format)
 
     #   handler       
     if not logger.handlers:
         logger.addHandler(sh)
         logger.addHandler(fh)
 
     # 6 -       logg   
     return logger
 
 if __name__ == '__main__':
     logger = log()
     logger.info('       log  ')
파일 코드 가 져 오기

from xx  import log
 
 log().info('xxx1')
 
 log().info('xxx2')
 
 log().info('xxx3')
출력:

대상 을 대상 으로 하 는 방안 은 똑 같이 상기 두 가지 이 므 로 스스로 해결 하 시기 바 랍 니 다.
총결산
python 콘 솔 인쇄 log 출력 중복 해결 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 python 인쇄 log 중복 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 지원 바 랍 니 다!

좋은 웹페이지 즐겨찾기