当前位置: 首页 > 科技观察

一篇文章带你了解Python中的Logging模块

时间:2023-03-19 17:54:53 科技观察

大家好,我是围棋进阶。一、基本使用1、logging使用场景log是什么?这个不用解释了。百分之九十的程序需要提供日志记录功能。Python内置的日志记录模块为我们提供了现成的高效易用的日志记录解决方案。但是并不是所有的场景都需要使用日志模块。以下是Python官方推荐的使用方法:(来源百度)任务场景最佳工具一般情况下,控制台显示输出print()报告正常程序运行时发生的事件eventlogging.info()(或logging.debug()更详细)发出有关特定事件的警告warnings.warn()或logging.warning()报告错误弹出异常报告错误而不引发异常logging.error()、logging.exception()或logging.critical()日志模块定义了下表所示的日志级别,按照事件的严重程度从低到高排列(注意都是大写!因为它们是常量。):importlogginglogging.basicConfig(level=logging.INFO,format='%(asctime)s-%(name)s-%(levelname)s-%(message)s')logger=logging.getLogger(__name__)logger.info("Startprintlog")logger.debug("Dosomething")logger.warning("Somethingmaybefail.")logger.info("Finish")Logging可以选择多种消息级别,例如debug、info、warning、error和critical。通过为logger或handler分配不同的级别,开发人员可以只将错误信息输出到特定的日志文件,或者只在调试过程中记录调试信息。logging.basicConfig(level=logging.DEBUG,format='%(asctime)s-%(name)s-%(levelname)s-%(message)s')比如我们把logger级别改成DEBUG,并且然后观察输出结果:控制台输出,可以发现输出了调试信息。logging.basicConfig函数的参数:filename:指定日志文件名;filemode:与file函数同义,指定日志文件的打开方式,'w'或'a';format:指定输出的格式和内容,format可以输出很多有用的信息。datefmt:指定时间格式,同time.strftime();level:设置日志级别,默认为logging.WARNNING;stream:指定日志的输出流,可以指定输出到sys.stderr、sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略;#parameter:function%(levelno)s:打印日志级别的值%(levelname)s:打印日志级别的名称%(pathname)s:打印当前执行程序的路径其实是sys.argv[0]%(filename)s:打印当前执行的程序名%(funcName)s:打印log的当前函数%(lineno)d:打印log的当前行号%(asctime)s:printlogtime%(thread)d:printthreadID%(threadName)s:printthreadname%(process)d:printprocessID%(message)s:printloginformation2.写日志设置日志记录到文件,创建一个FileHandler,设置输出消息的格式,添加到logger中,然后将日志写入指定的文件。importlogginglogger=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("Startprintlog")logger.debug("Dosomething")记录器。warning("Somethingmaybefail.")logger.info("Finish")打开log.txt文件。2.将日志同时输出到屏幕和日志文件。将StreamHandler添加到记录器以将日志输出到屏幕。importlogginglogger=logging.getLogger(__name__)logger.setLevel(level=logging.INFO)#addStreamHandlerhandler=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)#AddStreamHandlerlogger.addHandler(handler)logger.addHandler(console)logger.info("Startprintlog")logger.debug("Dosomething")logger.warning("Somethingmaybefail.")logger.info("Finish")控制台信息。log.text信息。3.设置消息的级别可以设置不同的日志级别来控制日志的输出。#日志级别:使用范围FATAL:致命错误CRITICAL:特别糟糕的事情,比如内存耗尽,磁盘空间为空,一般很少使用ERROR:发生错误时,比如IO操作失败或者连接问题WARNING:非常重要事件,但不是错误,例如用户登录密码错误INFO:处理请求或状态变化等日常事务DEBUG:调试时使用DEBUG级别,例如算法中每个循环的中间状态4.capturetracebacktraceback模块在Python中被抓取用于跟踪异常返回信息,可以记录traceback.importlogginglogger=logging.getLogger(__name__)logger.setLevel(level=logging.INFO)handler=logging.FileHandler("log.txt")handler.setLevel(记录.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("Startprintlog")logger.debug("Dosomething")logger.warning("Somethingmaybefail.")try:open("sklearn.txt","rb")except(SystemExit,KeyboardInterrupt):raiseexceptException:logger.error("Failedtoopensklearn.txtfromlogger.error",exc_info=True)logger.info("Finish")控制台而日志文件log.txt中的输出可以使用logger.exception(msg,args),相当于logger.error(msg,exc_info=True,args)。在控制台和日志文件log.txt输出中将logger.error("Failedtoopensklearn.txtfromlogger.error",exc_info=True)替换为logger.exception("Failedtoopensklearn.txtfromlogger.exception").2.小??结本文以Pythonl基础知识为例,主要介绍logging模块的基本使用,以及在实际应用中遇到的问题,并提供详细的解答。通过部分案例的讲解和运行效果图的截取,Python语言的使用可以帮助读者更好地理解Python。我是Go高级用户。觉得还不错的话记得给个赞哦。谢谢观看!