Python의 로깅 모듈은 타사 모듈이나 응용 프로그램에서 사용할 수 있는 일반적인 로깅 시스템을 제공합니다. 다음 기사에서는 주로 Python에서 로깅 라이브러리 사용에 대한 몇 가지 지식 요약을 소개합니다. , 도움이 필요한 친구들이 참고할 수 있습니다. 아래를 살펴보겠습니다.
머리말
최근 작업상의 문제로 Python 스크립트를 작성하고 있는데 항상 print to print 정보를 사용하는 것이 매우 낮은 느낌이어서 python의 로깅 라이브러리에 대해 공부하는 시간을 가졌습니다. 그리고 로그를 우아하게 기록해 보세요. 아래에서는 별로 설명할 것이 없지만, 자세한 소개를 살펴보겠습니다.
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: 모든 것이 예상대로 작동하는지 확인하세요.
경고: 예상치 못한 일이 발생했거나 가까운 시일 내에 문제가 발생할 것임을 나타냅니다(예: '디스크 가득 참'). 소프트웨어는 여전히 정상적으로 작동하고 있습니다.
오류: 더 심각한 문제로 인해 소프트웨어가 더 이상 일부 기능을 수행할 수 없습니다.
중요: 소프트웨어를 더 이상 실행할 수 없음을 나타내는 심각한 오류입니다.
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 디버그 메시지입니다
2017-10-16 Mon 10: 05:17 testlogging.py[line:26] INFO 정보 메시지입니다
2017-10-16 Mon 10:05:17 testlogging.py[line:27] WARNING 경고 메시지입니다
logging .basicConfig 함수의 매개변수:
filename: 로그 파일 이름 지정
filemode: 파일 함수와 동일한 의미, 로그 파일의 열기 모드 '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: time.strftime과 동일하게 시간 형식을 지정합니다. ()
level: 로그 수준을 설정합니다. 기본값은 로깅입니다. WARNING
stream: 로그의 출력 스트림을 지정합니다. sys.stderr, sys.stdout 또는 파일로 지정할 수 있습니다. 기본 출력은 sys.stderr입니다. 스트림과 파일 이름을 동시에 지정하면 스트림이 무시됩니다
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 정보 메시지입니다
root : WARNING 경고 메시지입니다
파일로 인쇄:
2017-10-16 Mon 10:20:07 testlogging.py[line:46] DEBUG 디버그 메시지입니다
2017 -10-16 Mon 10:20:07 testlogging.py[line :47] INFO 정보 메시지입니다
2017-10-16 Mon 10:20:07 testlogging.py[line:48] WARNING 경고 메시지입니다
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)%(funcName)s 함수 이름
%( levelname)s 레벨 이름
%(lineno)d 줄 번호
%(module)s 모듈 이름
%(message)s 메시지 본문
%(name)s 로그 모듈 이름
%(process)d 프로세스 ID
% (ProcessName) S 프로세스 이름
%(스레드) D 스레드 ID id al%(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')
위 내용은 Python의 로깅 라이브러리 사용 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!