python 에서 logging 라 이브 러 리 의 사용 총화

머리말
최근 작업 의 필요 로 python 스 크 립 트 를 쓰 고 있 습 니 다.항상 print 를 사용 하여 정 보 를 인쇄 하 는 느낌 이 낮 기 때문에 틈 틈 이 python 의 logging 라 이브 러 리 를 연구 하여 우아 하 게 로 그 를 인쇄 하고 기록 합 니 다.다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 해 보 겠 습 니 다.
1.간단하게 로 그 를 화면 에 인쇄 합 니 다.

import logging

logging.debug('This is debug message') #debug
logging.info('This is info message')  #info
logging.warning('This is warning message') #warn
화면 인쇄:WARNING:root:This is warning message
기본적으로 WARNING 단계 로 그 를 출력 합 니 다.
  • DEBUG:상세 정보,디 버 깅 정보.
  • INFO:모든 것 이 예상 한 대로 운행 되 는 지 확인 합 니 다.
  • WARNING:의외 의 일이 발생 했 거나 머지않아 문제 가 발생 할 것 임 을 나타 낸다(예 를 들 어'디스크 가 가득 찼 다').소프트웨어 는 여전히 정상적으로 일 하고 있다.4567918)
  • ERROR:더 심각 한 문제 로 인해 소프트웨어 가 일부 기능 을 수행 할 수 없습니다.
  • CRITICAL:심각 한 오류 로 소프트웨어 가 더 이상 실행 되 지 않 음 을 나타 낸다.
  • 2.basicConfig 함 수 를 통 해 로그 의 입력 형식 과 방법 을 설정 합 니 다.
    
    import logging
    
    logging.basicConfig(level=logging.DEBUG,
      format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
      datefmt='%Y-%m-%d %a %H:%M:%S',
      filename='test.log',
      filemode='w')
     
    logging.debug('This is debug message')
    logging.info('This is info message')
    logging.warning('This is warning message')
    이 코드 는 화면 에 로 그 를 인쇄 하지 않 고 현재 디 렉 터 리 에 test.log 로그 파일 을 생 성 합 니 다.로 그 는 로그 파일 에 인쇄 됩 니 다.
    2017-10-16 Mon 10:05:17 testlogging.py[line:25] DEBUG This is debug message
    2017-10-16 Mon 10:05:17 testlogging.py[line:26] INFO This is info message
    2017-10-16 Mon 10:05:17 testlogging.py[line:27] WARNING This is warning message
  • logging.basicConfig 함수 매개 변수:
  • filename:지정 한 로그 파일 이름
  • filemode:file 함수 와 의미 가 같 습 니 다.로그 파일 의 열기 모드 를 지정 합 니 다.'w'또는'a'
  • format:지정 한 출력의 형식 과 내용,format 는 많은 유용 한 정 보 를 출력 할 수 있 습 니 다.예 를 들 어 다음 과 같 습 니 다.
  • 
     %(levelno)s:          
     %(levelname)s:         
     %(pathname)s:            ,    sys.argv[0]
     %(filename)s:          
     %(funcName)s:          
     %(lineno)d:          
     %(asctime)s:        
     %(thread)d:     ID
     %(threadName)s:       
     %(process)d:     ID
     %(message)s:       
  • datefmt:지정 한 시간 형식,동시.strftime()
  • level:로그 단 계 를 설정 합 니 다.기본 값 은 logging.WARNING
  • 입 니 다.
  • stream:로그 의 출력 흐름 을 지정 합 니 다.sys.stderr,sys.stdout 또는 파일 로 출력 할 수 있 습 니 다.기본 값 은 sys.stderr 로 출력 합 니 다.stream 과 filename 이 동시에 지정 되 었 을 때 stream 은 무시 되 었 습 니 다
  • 3.화면 과 로그 파일 에 로 그 를 동시에 출력 합 니 다.
    
    #    StreamHandler, INFO                 ,               
    console = logging.StreamHandler()
    console.setLevel(logging.INFO)
    formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
    console.setFormatter(formatter)
    logging.getLogger('').addHandler(console)
    위 코드 를 삽입 하면 동시에 화면 에 로 그 를 출력 할 수 있 습 니 다.
    화면 인쇄:
    root : INFO This is info message
    root : WARNING This is warning message
    파일 에서 인쇄:
    2017-10-16 Mon 10:20:07 testlogging.py[line:46] DEBUG This is debug message
    2017-10-16 Mon 10:20:07 testlogging.py[line:47] INFO This is info message
    2017-10-16 Mon 10:20:07 testlogging.py[line:48] WARNING This is warning message
    4.설정 파일 을 통 해 로그 설정
    
    #logger.conf
    [loggers]
    #  logger  ,root   ,     ,       。 
    keys=root,infoLogger,warnlogger
    
    [logger_root] 
    level=DEBUG    #level   ,   DEBUG、INFO、WARNING、ERROR、CRITICAL
    handlers=infohandler,warnhandler #handlers    ,     ,     
    
    [logger_infoLogger]   #[logger_xxxx] logger_    
    handlers=infohandler
    qualname=infoLogger   #qualname logger  ,       logging.getLogger  。         ,    root  。
    propagate=0    #propagate        log  ,0:  1: 
    
    [logger_warnlogger]
    handlers=warnhandler
    qualname=warnlogger
    propagate=0
    
    ###############################################
    #  handler
    [handlers]
    keys=infohandler,warnhandler
    
    [handler_infohandler]
    class=StreamHandler   #class handler  
    level=INFO    #level     
    formatter=form02   #formatter,     formatter
    args=(sys.stdout,)   #args handler       
    
    [handler_warnhandler]
    class=FileHandler
    level=WARN
    formatter=form01
    args=('logs/deploylog.log', 'a')
    
    ###############################################
    #        
    [formatters]
    keys=form01,form02
    
    [formatter_form01]
    format=%(message)s %(asctime)s
    datefmt=%Y-%m-%d %H:%M:%S
    
    [formatter_form02]
    format=%(asctime)s %(levelname)s %(message)s
    datefmt=%Y-%m-%d %H:%M:%S
    로그 형식
  • %(asctime)s 년-월-일 시-분-초,밀리초 2013-04-26 20:10:43,745
  • %(filename)s 파일 이름,디 렉 터 리 없 음
  • %(pathname)s 디 렉 터 리 이름,전체 경로
  • %(funcName)s 함수 명
  • %(levelname)s 급 별명
  • %(lineno)d 줄 번호
  • %(module)s 모듈 명
  • %(message)s 메시지 체
  • %(name)s 로그 모듈 명
  • %(process)d 프로 세 스 id
  • %(processName)s 프로 세 스 이름
  • %(thread)d 스 레 드 id
  • %(threadName)s 스 레 드 이름
  • 테스트 프로필
    
    from logging.config import fileConfig
    
    fileConfig('logger.conf')
    logger=logging.getLogger('infoLogger')
    logger.info('test1')
    logger_error=logging.getLogger('warnhandler')
    logger_error.warn('test5')
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기