Python logging 日志模块配置/使用/禁用

在项目开发中,调试是必不可少的,Python 的 logging 模块为我们调试提供了极大的便利。
可以设置单个文件的日志禁用,比如当计划任务一直请求接口,会影响调试。此时不想在 log 日志文件中输出 DEBUG 的 API 请求

一、 logging 模块的简单配置

日志等级

logging 提供了5个日志等级,利用不同的日志函数,消息可以按某个等级记入日志。

级别 日志函数 描述
DEBUG logging.debug() 最低级别。用于小细节。通常只有在诊断问题时,你才会关心这些消息
INFO logging.info() 用于记录程序中一般时间的信息,或确认一切工作正常
WARNING logging.warning() 用于表示可能的问题,它不会阻止程序的工作,但将来可能会
ERROR logging.error() 用于记录错误,它导致程序做某事失败
CRITICAL logging.critical() 最高级别。用于表示致命的错误,它导致或将要导致程序完全停止工作

1. logging 初始化

import logging
logging.basicConfig()

2. 创建 logging 实例对象

logger = logging.getLogger()

3. 设置级别

logger.setLevel(logging.DEBUG)

4. 指定 logger 实例对象的 handler

在日志文件达到指定的大小后将清空原来的日志文件,比如 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"))

5. logger 实例对象添加 handler

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)


三、logger 日志使用

现在我们就可以把需要的日志信息通过调用 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 函数都会失效,禁用的级别一定要对应代码中你写的那个级别对应。

1. 当没禁用时

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

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 - 发生错误

你可能感兴趣的:(python,开发语言)