로그란? 이것은 많은 설명이 필요하지 않습니다. 프로그램의 90%는 로깅 기능을 제공해야 합니다. Python에 내장된 로깅 모듈은 이미 만들어져 있고 효율적이며 사용하기 쉬운 로깅 솔루션을 제공합니다. 그러나 모든 시나리오에서 로깅 모듈을 사용해야 하는 것은 아닙니다.
다음은 공식적으로 권장되는 Python 사용 방법입니다. (출처 Baidu)
작업 시나리오 | 최고의 도구 | ||||||
---|---|---|---|---|---|---|---|
일반적으로 출력은 콘솔에 표시됩니다 | 인쇄() print()
|
||||||
报告正常程序操作过程中发生的事件 | logging.info() (或者更详细的logging.debug() logging.info() code> 🎜🎜(또는 더 자세히 🎜🎜<code style="box-sizing: border-box;font-family: var(--monospace);text-align: left;vertical-align:initial;border-width : 1px; 테두리 스타일: 단색; 테두리 색상: rgb(231, 234, 237); 배경 색상: rgb(243, 244, 244); 테두리 반경: 3px; 오른쪽 패딩: 2px; 왼쪽 패딩: 2px; 글꼴 크기: 0.9em;">logging.debug() 🎜🎜)🎜🎜发take有关特告 |
warnings.warn() warnings.warn() 或者logging.warning ()报告错误 |
弹出异常 |
在不引发异常的情况下报告错误 |
logging.error() , logging.exception() 或者logging.critical() 或者logging.warning
|
logging.error()
🎜🎜, 🎜🎜logging.Exception()
🎜🎜或者🎜🎜logging.tical()
🎜 🎜🎜🎜🎜🎜로깅 모듈은 다음 표에 표시된 로그 수준을 낮은 이벤트 심각도에서 높은 이벤트 심각도로 정렬하여 정의합니다(모두 대문자로 표시됩니다! 상수이므로).
import logging logging.basicConfig(level = logging.INFO,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s') logger = logging.getLogger(__name__) logger.info("Start print log") logger.debug("Do something") logger.warning("Something maybe fail.") logger.info("Finish")
Can 로그인하세요 디버그, 정보, 경고, 오류, 중요 등 다양한 메시지 수준 중에서 선택하세요. 로거 또는 핸들러에 서로 다른 수준을 할당함으로써 개발자는 특정 로그 파일에만 오류 정보를 출력하거나 디버깅 중에 디버깅 정보만 기록할 수 있습니다.
logging.basicConfig(level = logging.DEBUG,format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s')
예를 들어 로거 레벨을 DEBUG로 변경하고,
출력 결과를 관찰하면
콘솔 출력을 보면 디버그 정보가 출력되는 것을 확인할 수 있습니다.
logging.basicConfig 함수의 매개변수:
filename: 로그 파일 이름 지정;
filemode: 파일 기능과 동일한 의미, 열기 모드 지정 로그 파일의 'w' 또는 'a';
형식: 출력 형식과 내용을 지정하면 많은 유용한 정보를 출력할 수 있습니다.
datefmt:指定时间格式,同time.strftime();
level:设置日志级别,默认为logging.WARNNING;
stream:指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略;
#参数:作用 %(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:打印日志信息
设置logging,创建一个FileHandler,并对输出消息的格式进行设置,将其添加到logger,然后将日志写入到指定的文件。
import logging logger = logging.getLogger(__name__) logger.setLevel(level = logging.INFO) handler = logging.FileHandler("log.txt") handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) logger.info("Start print log") logger.debug("Do something") logger.warning("Something maybe fail.") logger.info("Finish")
打开log.txt文件。
2. 将日志同时输出到屏幕和日志文件
logger中添加StreamHandler,可以将日志输出到屏幕上
import logging logger = logging.getLogger(__name__) logger.setLevel(level = logging.INFO) #添加StreamHandler handler = logging.FileHandler("log.txt") handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) console = logging.StreamHandler() console.setLevel(logging.INFO) #添加StreamHandler logger.addHandler(handler) logger.addHandler(console) logger.info("Start print log") logger.debug("Do something") logger.warning("Something maybe fail.") logger.info("Finish")
控制台信息。
log.text信息。
可以设置不同的日志等级,用于控制日志的输出。
#日志等级:使用范围 FATAL:致命错误 CRITICAL:特别糟糕的事情,如内存耗尽、磁盘空间为空,一般很少使用 ERROR:发生错误时,如IO操作失败或者连接问题 WARNING:发生很重要的事件,但是并不是错误时,如用户登录密码错误 INFO:处理请求或者状态变化等日常事务 DEBUG:调试过程中使用DEBUG等级,如算法中每个循环的中间状态
Python中的traceback模块被用于跟踪异常返回信息,可以在logging中记录下traceback.
import logging logger = logging.getLogger(__name__) logger.setLevel(level = logging.INFO) handler = logging.FileHandler("log.txt") handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) console = logging.StreamHandler() console.setLevel(logging.INFO) logger.addHandler(handler) logger.addHandler(console) logger.info("Start print log") logger.debug("Do something") logger.warning("Something maybe fail.") try: open("sklearn.txt","rb") except (SystemExit,KeyboardInterrupt): raise except Exception: logger.error("Faild to open sklearn.txt from logger.error",exc_info = True) logger.info("Finish")
控制台和日志文件log.txt中输出。
可以使用logger.exception(msg,args),它等价于logger.error(msg,exc_info = True,args)。
将logger.error("Faild to open sklearn.txt from logger.error",exc_info = True)
대체 logger.Exception("logger.Exception에서 sklearn.txt를 열지 못했습니다.")
콘솔 및 로그 파일 log.txt에 출력합니다. ㅋㅋㅋ 자세한 답변을 제공합니다.
위 내용은 一篇文章带你搞定Python中logging模块의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!