>  기사  >  백엔드 개발  >  Python 모듈: 로깅

Python 모듈: 로깅

高洛峰
高洛峰원래의
2016-11-01 12:52:341384검색

많은 프로그램은 로그를 기록해야 하며, 로그에 포함된 정보에는 일반 프로그램 액세스 로그가 포함되며, Python의 로깅 모듈은 표준 로그 인터페이스를 제공합니다. 로그는 다양한 형식으로 저장됩니다. 디버그, 정보, 경고, 오류, 중요 등 5가지 수준으로 나눌 수 있습니다.

모듈 사용 방법을 살펴보겠습니다.

#logging初识
 
import logging
 
logging.warning("user [James] attempted wrong password more than 3 times")
logging.critical("server is down")
 
# WARNING:root:user [James] attempted wrong password more than 3 times
# CRITICAL:root:server is down
위 코드는 가장 간단한 방법이며, 괄호 안의 내용은 로깅 후의 방법으로 로깅의 5단계 세부 정보를 살펴보겠습니다.

Python 모듈: 로깅

로그를 파일에 기록하려는 경우 방법도 매우 간단합니다.

#日志打印到文件中
 
import  logging
 
logging.basicConfig(filename="example.log",level=logging.INFO,
                    format="%(asctime)s %(message)s", datefmt="%m/%d/%Y %H:%M:%S [%A]")
                                                                # H 24小时格式  I 12小时格式  A 周几完整  a 周几简写  p AM/PM
 
 
logging.debug("This message should go to the log file")
logging.info("So should this")
logging.warning("And this ,too")
logging.basicConfig는 입력 파일 경로, 입력 로그 정보를 정의합니다. 레벨, 입력 형식 및 형식을 사용자 정의할 수 있습니다. 정의; 코드를 실행한 후 example.log 파일은 다음 정보를 생성합니다.

10/31/2016 17:16:17 [Monday] So should this
10/31/2016 17:16:17 [Monday] And this ,too
다음 문장에서 level=loggin.INFO는 다음을 의미합니다. 즉, INFO 이상의 로그만 파일에 기록됩니다. 이 예에서는 디버그 로그를 기록하려면 로그를 기록하지 않습니다. 로그 레벨을 DEBUG로 변경하면 됩니다

로그를 화면과 파일 로그에 동시에 인쇄하려면 몇 가지 복잡한 지식을 알아야 합니다.

로깅 라이브러리는 모듈식 접근 방식을 취하고 로거, 핸들러, 필터, 포맷터 등 여러 범주의 구성 요소를 제공합니다.

로거는 애플리케이션 코드가 직접 사용하는 인터페이스를 노출합니다.

핸들러는 전송합니다. 로그 레코드(로거에 의해 생성됨)를 적절한 대상으로 보냅니다.

필터는 출력할 로그 레코드를 결정하기 위한 보다 세부적인 기능을 제공합니다.

포맷은 최종 출력에서 ​​로그 레코드의 레이아웃을 지정합니다. .

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#-Author-Lian
 
import  logging
 
#创建logger
logger = logging.getLogger("test_log")  #创建logger对象   括号内容随便写
logger.setLevel(logging.INFO)       #全局日志级别
 
 
ch = logging.StreamHandler()        #日志打印到屏幕上
ch.setLevel(logging.DEBUG)          #指定ch日志打印级别
 
fh = logging.FileHandler("access.log")      #日志存进文件
fh.setLevel(logging.WARNING)            #指定fh日志输入级别
 
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")   #定义日志格式,可写多个
 
#添加日志格式到ch,fh
ch.setFormatter(formatter)
fh.setFormatter(formatter)
 
#添加ch,fh到logger中
logger.addHandler(ch)
logger.addHandler(fh)
 
 
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
Global 로그 레벨은 전체 프로그램의 밑줄입니다. 로컬 로그 레벨을 인쇄하려면 이 레벨보다 낮을 수 없습니다.

스크린 인쇄 정보

2016-10-31 17:23:42,988 - test_log - INFO - info message
2016-10-31 17:23:42,988 - test_log - WARNING - warn message
2016-10-31 17:23:42,988 - test_log - ERROR - error message
2016-10-31 17:23:42,988 - test_log - CRITICAL - critical message
access.log:

2016-10-31 17:02:06,223 - test_log - WARNING - warn message
2016-10-31 17:02:06,224 - test_log - ERROR - error message
2016-10-31 17:02:06,224 - test_log - CRITICAL - critical message
모든 로그 형식:

Python 모듈: 로깅

몇 가지 중요한 형식: %(lineno)d 출력 인쇄 로그 코드 줄 %(process)d는 로그 ID를 인쇄하는 프로세스를 출력하고, %(thread)d는 인쇄 로그의 스레드 ID를 출력합니다


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.