이 기사의 내용은 Python의 로깅 모듈 분석(코드 예제)에 관한 것입니다. 특정 참고 가치가 있으므로 도움이 필요한 친구에게 도움이 되길 바랍니다.
1. 로깅 수준
debug: 우선 순위 10, 디버깅 세부 정보 기록, 디버깅 중에만 활성화됨
info: 우선 순위 20, 일반 메시지 기록, 오류 보고 및 경고 대기.
경고: 우선순위 30, 관련 경고 정보를 기록합니다.
error: 우선순위 40, 오류 정보 및 프로그램 충돌 기록
tical: 우선순위 50, 오류 정보 기록
2. 로깅 모듈의 주요 구조
로깅의 소스코드를 보면 기능을 구현하는 4가지 주요 클래스가 있음을 알 수 있습니다.
Loggers: 관련 구성 설정 등 프로그램에서 직접 사용할 수 있는 인터페이스를 제공합니다.
Handlers: Transmits 로거가 생성한 로그를 지정된 위치로 설정합니다.
필터: 출력 로그를 필터링합니다.
포맷: 로그의 출력 형식을 제어합니다.
Formatters
Formatters 개체는 로그의 출력 형식을 정의하며 많은 선택적 매개 변수가 있습니다.
매개변수 | 의미 |
---|---|
%(name)s | 로거 이름 |
%(levellno)s | 숫자 형식의 로그 수준 |
%(레벨 이름)s | 텍스트 형식의 로그 수준 |
%(pathname)s | 로그 출력 기능을 호출하는 모듈의 전체 경로 이름, |
%(filename)s | 모듈의 파일이 없을 수 있음 로그 출력 함수를 호출하는 이름 |
%(module)s | 로그 출력 함수를 호출하는 모듈 이름 |
%(funcName)s | 로그 출력 함수를 호출하는 함수 이름 |
%(lineno)d | 로그 호출 출력 함수의 명령문이 위치한 코드 라인 |
%(created)f | 유닉스 표기법으로 부동 소수점 시간으로 표현한 현재 시간 |
%(relativeCreated)d | 로그 정보 출력 시 Logger 이후 생성됩니다. |
%(asctime)s | 현재 시간을 문자열 형식으로, 기본 형식은 '2018'입니다. -11-22 16:49:45,896', 쉼표 뒤에는 밀리초 |
%(thread)d | 스레드 ID가 있으며 |
%(threadName)s | 스레드 이름이 없을 수 있습니다. |
%(process)d | Process ID가 있고 |
%(message) s | 사용자가 출력한 정보 |
예:
import logging #fmt:定义输出的日志信息的格式 #datefmt:定义时间信息的格式,默认为:%Y-%m-%d %H:%M:%S #style:定义格式化输出的占位符,默认是%(name)格式,可选{}或$格式 formatter=logging.Formatter(fmt='%(asctime)s %(levelname)s: %(message)s' ,datefmt='%Y-%m-%d %H:%M:%S',style='%')
핸들러 로그 프로세서
로그 프로세서는 파일로 출력하든 표준 출력으로 출력하든 관계없이 로그의 특정 흐름 방향을 처리하는 데 사용됩니다. 포맷터를 설정하여 출력 형식을 제어합니다. 로그를 필터링하는 필터를 추가합니다.
일반적으로 사용되는 두 가지 프로세서가 있습니다
StreamHandler: 로그를 콘솔에 인쇄하는 데 사용됨
FileHandler: 로그를 로그 파일로 인쇄하는 데 사용됨
기타 프로세서
상세 위치 | 설명 | |
---|---|---|
logging.handlers.RotatingHandler | 로그 롤백 방법, 최대 로그 파일 수 및 로그 파일 롤백 지원 | |
logging.TimeRotatingHandler | 로그 롤백 방법, 특정 시간 범위 내에서 로그 파일을 롤백 | |
logging.handlers.SocketHandler | 원격으로 로그를 TCP/IP 소켓으로 출력 | |
logging.DatagramHandler | UDP 소켓에 원격으로 로그 출력 | |
logging.handlers.SMTPHandler | 원격으로 로그를 이메일 주소로 출력 | |
logging.handlers.SysLogHandler | syslog에 로그 출력 | |
logging.handlers.NTEventLogHandler | Windows NT/2000/xp의 이벤트 로그에 원격으로 출력 | |
logging.handlers.MemoryHandler | 메모리의 지정된 버퍼에 로그 출력 | |
logging.handlers.HTTPHandler | "GET" 또는 "POST"를 통해 원격으로 HTTP 서버로 출력 |
Logger 로그 객체
Logger는 모든 로깅 방법을 관리합니다.from logging import error, debug, warning, info, fatal, critical, getLogger #返回一个Logger实例 #以'root'为名字的日志对象在Logger对象中只有一个实例 logger=getLogger('root') print('获取根日志对象',logger.root) print('获取manager',logger.manager) print('获取根日志对象的名字',logger.name) print('获取根日志对象记录水平',logger.level) print('获取根日志对象过滤器列表',logger.filters) print('获取根日志对象处理器列表',logger.handlers) print('获取根日志对象',logger.disabled) #设置日志记录水平 logger.setLevel('info') #输出日志信息,格式化输出 logger.info('this is %s','info',exc_info=1) #记录warning信息 logger.warning('') #记录error信息 logger.error('') #等价于logger.error('',exc_info=1) logger.exception('') #记录debug信息 logger.debug('') #记录critical信息 logger.critical('') #直接指定级别 logger.log('info','') #添加处理器 logger.addHandler() #移除处理器 logger.removeHandler() #判是否有处理器 logger.hasHandlers()
3. 로거의 기본 사용
예:import logging import sys def my_get_logger(appname): #获取logger实例,如果参数为空则返回root logger logger=logging.getLogger(appname) #创建日志输出格式 formatter=logging.Formatter('%(asctime)s %(levelname)s: %(message)s') #指定输出的文件路径 file_handler=logging.FileHandler('test.log') # 设置文件处理器,加载处理器格式 file_handler.setFormatter(formatter) #控制台日志 console_handler=logging.StreamHandler(sys.stdout) console_handler.formatter=formatter #为logger添加的日志处理器 logger.addHandler(file_handler) logger.addHandler(console_handler) #指定日志的最低输出级别,默认为warn级别 logger.setLevel(logging.INFO) return logger if __name__ == '__main__': logger=my_get_logger('test') logger.debug('this is debug info') logger.info('this is information') logger.warning('this is warning message') logger.error('this is error message') logger.fatal('this is fatal message,it is same ad logger.critical') logger.critical('this is critical message')결과:
2018-11-22 16:31:34,023 INFO: this is information 2018-11-22 16:31:34,023 WARNING: this is warning message 2018-11-22 16:31:34,023 ERROR: this is error message 2018-11-22 16:31:34,024 CRITICAL: this is fatal message,it is same ad logger.critical 2018-11-22 16:31:34,024 CRITICAL: this is critical message
4. 로거 로깅의 논리 호출 프로세스
#logging.cong
[loggers]
#定义日志的对象名称是什么,注意必须定义root,否则报错
keys=root,main
[handlers]
#定义处理器的名字是什么,可以有多个,用逗号隔开
keys=consoleHandler
[formatters]
#定义输出格式对象的名字,可以有多个,用逗号隔开
keys=simpleFormatter
[logger_root]
#配置root对象的日志记录级别和使用的处理器
level=INFO
handlers=consoleHandler
[logger_main]
#配置main对象的日志记录级别和使用的处理器,qualname值得就是日志对象的名字
level=INFO
handlers=consoleHandler
qualname=main
#logger对象把日志传递给所有相关的handler的时候,会逐级向上寻找这个logger和它所有的父logger的全部handler,
#propagate=1表示会继续向上搜寻;
#propagate=0表示停止搜寻,这个参数涉及重复打印的坑。
propagate=0
[handler_consoleHandler]
#配置处理器consoleHandler
class=StreamHandler
level=WARNING
formatter=simpleFormatter
args=(sys,)
[formatter_simpleFormatter]
#配置输出格式过滤器simpleFormatter
format=%(asctime)-%(name)s-%(levelname)s-%(message)s
참고: 로거와 핸들러 모두 로그 수준을 설정할 수 있으며, 로그 출력은 가장 높은 수준을 취합니다.
사전 양식 구성이 더욱 강력하고 유연해졌습니다. dictConfig 기능을 통해 다른 형식의 구성 파일을 json, YAML 등과 같은 사전으로 변환할 수 있습니다.
예:
import yaml from logging.config import dictConfig import os filename=os.path.dirname(os.path.abspath(__file__)) with open(filename+'/logging.yaml','r') as f: log=yaml.load(f.read()) dictConfig(log)
#logging.yaml #注意:yaml格式严格,:后面一定要带空格 version: 1 formatters: simple: format: '%(asctime)s-%(name)s-%(levelname)s-%(message)s' handlers: console: class: logging.StreamHandler level: DEBUG formatter: simple stream: ext://sys.stdout console_err: class: logging.StreamHandler level: DEBUG formatter: simple stream: ext://sys.stderr loggers: simpleExample: level: DEBUG handlers: [console] propagate: no root: level: DEBUG handlers: [console_err]]6. 로거 구성 변경 듣기
logging.config.listen(port) 함수를 사용하면 영어 프로그램이 소켓의 새 구성 정보를 모니터링하여 애플리케이션을 다시 시작하지 않고도 런타임에 구성을 변경할 수 있습니다. 프로그램. 으르르르르
위 내용은 Python의 로깅 모듈 분석(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!