在项目开发中,调试是必不可少的,Python 的 logging 模块为我们调试提供了极大的便利。
可以设置单个文件的日志禁用,比如当计划任务一直请求接口,会影响调试。此时不想在 log 日志文件中输出 DEBUG 的 API 请求
logging 提供了5个日志等级,利用不同的日志函数,消息可以按某个等级记入日志。
级别 | 日志函数 | 描述 |
---|---|---|
DEBUG | logging.debug() | 最低级别。用于小细节。通常只有在诊断问题时,你才会关心这些消息 |
INFO | logging.info() | 用于记录程序中一般时间的信息,或确认一切工作正常 |
WARNING | logging.warning() | 用于表示可能的问题,它不会阻止程序的工作,但将来可能会 |
ERROR | logging.error() | 用于记录错误,它导致程序做某事失败 |
CRITICAL | logging.critical() | 最高级别。用于表示致命的错误,它导致或将要导致程序完全停止工作 |
import logging
logging.basicConfig()
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
在日志文件达到指定的大小后将清空原来的日志文件,比如 log1 设置了 1M,满 1M 后将新建 log2 进行记录日志,如此循环。
from logging import handlers
# 创建handler对象,指定日志文件位置以及大小,日志份数
handler = handlers.RotatingFileHandler("logs/log", maxBytes=1024*50, backupCount=5)
# 指定handler对象的日志输出格式
handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(lineno)s - %(message)s"))
logger.addHandler(handler)
import logging
from logging import handlers
# logging 初始化
logging.basicConfig()
# 创建 logger 实例对象
logger = logging.getLogger()
# 设置 logger 对象调试级别
logger.setLevel(logging.DEBUG)
# 为 logger 对象创建 handler 对象,指定日志文件位置以及大小,日志份数
handler = handlers.RotatingFileHandler("logs/log", maxBytes=1024*50, backupCount=5)
# 指定 handler 对象的日志输出格式
handler.setFormatter(logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(lineno)s - %(message)s"))
# 把 handler 绑定到 logger 对象中
logger.addHandler(handler)
现在我们就可以把需要的日志信息通过调用 logging 提供的函数写入到日志文件中。
n = 0
try:
print(10 / n)
except Exception as e:
print('e:',e)
logging.error(e)
logger.error("发生错误")
查看日志文件
2018-08-02 13:54:30,576 - root - ERROR - 24 - division by zero
2018-08-02 13:54:30,576 - root - ERROR - 25 - 发生错误
只需要在需要禁用日志的地方插入 logging.disable(logging.logging_level)
即可,后面的 logging 对应的 loggle_level 函数都会失效,禁用的级别一定要对应代码中你写的那个级别对应。
n = 0
try:
print(10 / n)
except Exception as e:
print('e:',e)
logging.error(e)
logger.error("发生错误1")
# logging.disable(logging.ERROR)
logger.error("发生错误2")
--------------查看日志文件-----------
2018-08-02 15:44:35,524 - root - ERROR - 24 - division by zero
2018-08-02 15:44:35,524 - root - ERROR - 25 - 发生错误
2018-08-02 15:44:35,524 - root - ERROR - 27 - 发生错误2
n = 0
try:
print(10 / n)
except Exception as e:
print('e:',e)
logging.error(e)
logger.error("发生错误1")
logging.disable(logging.ERROR)
logger.error("发生错误2")
--------------查看日志文件-----------
2018-08-02 15:48:09,237 - root - ERROR - 24 - division by zero
2018-08-02 15:48:09,237 - root - ERROR - 25 - 发生错误