likes
comments
collection
share

Python logging日志模块的使用

作者站长头像
站长
· 阅读数 50

在实际的开发过程中,为了方便调试程序,记录系统的运行状态及错误等,及时发现系统的问题并快速定位问题,通常会使用日志。下面来介绍下在Python项目中如何使用日志。

Python提供了一个用于记录日志的标准库模块logging,主要用于进行格式化内容输出,可将格式化内容输出到屏幕或者文件。logging模块实现了许多强大的函数和类,可以为应用程序提供一个灵活的事件日志系统。

logging的简单使用

日志级别

logging模块日志级别有DEBUG、INFO、WARNING、ERROR、CRITICAL五种。

级别数值使用范围
CRITICAL50产生了不可逆的错误,导致系统无法正常工作时
ERROR40程序发生错误,某些功能不能正常运行时
WARNING30打印警告信息,系统还在正常运行
INFO20通常只记录程序中一般事件的信息,用于确认工作一切正常
DEBUG10一般在功能开发阶段使用,检查系统功能是否正常

级别排序:DEBUG < INFO < WARNING < ERROR < CRITICAL。级别最低的是DEBUG,级别最高的是CRITICAL。 设置了日志级别后,调用比级别低的日志记录函数不会输出任何信息,例如setLevel(logging.INFO),此时函数参数为INFO,那么该logger将只会处理INFO、WARNING、ERROR和CRITICAL级别的日志,而DEBUG级别的消息将会被忽略。

日志输出

import logging


logging.debug("这条日志是debug级别")
logging.info("这条日志是info级别")
logging.warning("这条日志是warning级别")
logging.error("这条日志是error级别")
logging.critical("这条日志是critical级别")

执行结果为: Python logging日志模块的使用 通过结果,你会发现调用debug()和info()方法没有输出任何信息,这是因为默认的日志级别是ERROR,上面我们说了调用比级别低的日志记录函数不会输出任何信息,所以低于ERROR级别的日志不会输出。想要输出的话要更改日志级别,可以使用logging模块的basicConfig()方法修改日志级别。

import logging


logging.basicConfig(level=logging.DEBUG)  # 修改日志级别为DEBUG
logging.debug("这条日志是debug级别")
logging.info("这条日志是info级别")
logging.warning("这条日志是warning级别")
logging.error("这条日志是error级别")
logging.critical("这条日志是critical级别")

执行结果为: Python logging日志模块的使用

设置日志输出格式

上面输出结果中每行日志信息的格式是 日志级别:日志器名称:日志内容,之所以会这样输出,是因为logging模块提供的日志记录函数所使用的日志器的默认日志格式为BASIC_FORMAT,其值为:%(levelname)s:%(name)s:%(message)s 我们可以根据以下进行日志输出格式的自定义:

格式说明
%(levelno)s日志级别的数值
%(levelname)s日志级别的名称
%(pathname)s当前执行程序的路径
%(filename)s当前执行程序名
%(funcName)s日志的当前函数
%(lineno)d日志的当前行号
%(asctime)s日志的时间
%(thread)d线程ID
%(threadName)s线程名称
%(process)d进程ID
%(message)s日志信息

设置日志输出格式的例子如下:

import logging


log_formatter = '%(levelname)s %(asctime)s %(filename)s:第%(lineno)d行: %(message)s'
logging.basicConfig(level=logging.DEBUG, format=log_formatter)
logging.debug("这条日志是debug级别")
logging.info("这条日志是info级别")
logging.warning("这条日志是warning级别")
logging.error("这条日志是error级别")
logging.critical("这条日志是critical级别")

执行结果为:

Python logging日志模块的使用

logger的高级用法

如果只是简单的使用logging模块,那么使用上面的方法基本就可以满足了,但是logging模块的用法不止如此,下面来看一下。 logging模块采用了模块化设计,主要包含四种组件:

  • Loggers:日志器,提供应用程序直接调用的接口
  • Handlers:处理器,决定将日志记录分配至正确的目的地;
  • Filters:过滤器,提供更好的粒度控制,对日志信息进行过滤,决定哪些日志会被输出
  • Formatters:格式器,设置日志记录的输出格式

在实际操作中使用logging的步骤一般是:先创建日志记录器,再设置日志级别,再创建日志文件,再设置日志格式,最后再将日志处理程序记录到记录器。

使用示例:

import logging
from logging.handlers import RotatingFileHandler

# 创建日志记录器
logger = logging.getLogger()
# 设置日志级别
logger.setLevel(logging.DEBUG)
# 创建日志记录器,指明日志保存的路径、每个日志文件的最大大小、保存的日志文件个数上限
file_log_handler = RotatingFileHandler("logs/test.log", maxBytes=1024 * 1024 * 100, backupCount=10)
# 创建日志记录的格式
formatter = logging.Formatter('%(levelname)s %(asctime)s %(filename)s:第%(lineno)d行: %(message)s')
# 设置日志记录格式
file_log_handler.setFormatter(formatter)
stream_handler = logging.StreamHandler()  # 往屏幕上输出
# 添加日志记录器
logging.getLogger().addHandler(file_log_handler)
logging.getLogger().addHandler(stream_handler)
logging.debug("这条日志是debug级别")
logging.info("这条日志是info级别")
logging.warning("这条日志是warning级别")
logging.error("这条日志是error级别")
logging.critical("这条日志是critical级别")

通过上面示例代码,我们可以把日志输出到文件,如果想要把日志同时输出在文件和屏幕上,还需要再创建并添加一个往屏幕上输出的日志处理器器:logging.StreamHandler()。

总结

以上就是Python中日志模块logging的使用,日志记录是程序开发中很重要的一部分,如果你还没开始使用或者还在使用print记录的话,快去用起来吧。

最后,感谢女朋友在工作和生活中的包容、理解与支持 ! Python logging日志模块的使用

转载自:https://juejin.cn/post/6999141913152454692
评论
请登录