Python 配置日志

前言

如果你想在调试时能看到错误信息,但又不想在生产环境中输出错误信息,可以使用 log 库来记录错误信息,在调试时输出 log,在生产环境中不输出。

步骤

首先导包

import logging

然后开启logging

logging.basicConfig(filename='example.log', level=logging.DEBUG)

其中 filename='example.log表示把 logging 中的信息输出到 example.log 文件中,如果不需要可省略。filename 参数指定了日志文件的名称, level 参数指定了日志级别, logging.DEBUG 就是打印所有debug及以上级别的log

在生产环境中,我们可以关闭 logging 或者更改 logging level,不会有错误信息的输出。
当然你也可以通过

 logging.basicConfig(filename='example.log', filemode='w', level=logging.DEBUG) 

来进行配置,filemode=‘w’ 代表每次运行程序都会清空之前的日志

日志消息的格式

format 参数用来指定日志消息的格式,它是一个格式化字符串
format 字段中可以包含特定的格式化指示符,它们将被日志记录器替换为相应的日志信息。以下是一些常用的格式化指示符:

  • %(asctime)s:日志事件发生的时间
  • %(levelname)s:日志级别名称(例如,INFO,DEBUG,ERROR)
  • %(message)s:日志消息
  • %(name)s:记录器的名称
  • %(filename)s:调用日志记录的源文件的文件名
  • %(lineno)d:调用日志记录的源文件中的行号
  • %(funcName)s:调用日志记录的函数名
  • %(threadName)s:线程名
    下面是一个示例,展示如何配置和使用 logging.basicConfig 来设置日志的格式:
import logging

# 配置日志记录器
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)

# 创建日志记录器
logger = logging.getLogger(__name__)

# 测试日志记录
logger.debug('这是一个调试消息')
logger.info('这是一个信息消息')
logger.warning('这是一个警告消息')
logger.error('这是一个错误消息')
logger.critical('这是一个严重消息')

在上面的示例中,日志格式被配置为 ‘%(asctime)s - %(name)s - %(levelname)s - %(message)s’,这将生成类似以下的日志消息:

2024-07-03 12:34:56,789 - __main__ - INFO - 这是一个信息消息

常见格式化指示符示例

  1. 基本格式:
logging.basicConfig(format='%(levelname)s:%(message)s')  # INFO:这是一个信息消息
  1. 包含时间、文件名和行号:
logging.basicConfig(format='%(asctime)s - %(filename)s:%(lineno)d - %(levelname)s - %(message)s')
# 2024-07-03 12:34:56,789 - example.py:10 - INFO - 这是一个信息消息
  1. 包含线程名:
logging.basicConfig(format='%(asctime)s - %(threadName)s - %(levelname)s - %(message)s')
# 2024-07-03 12:34:56,789 - MainThread - INFO - 这是一个信息消息
  1. 包含模块名和函数名:
logging.basicConfig(format='%(asctime)s - %(module)s - %(funcName)s - %(levelname)s - %(message)s')
# 2024-07-03 12:34:56,789 - example - <module> - INFO - 这是一个信息消息

应当了解的知识

logging 模块支持五种日志级别,从高到低分别是:

  1. CRITICAL (50): 严重错误,程序无法继续运行
  2. ERROR (40): 错误信息,需要人工干预
  3. WARNING (30): 警告信息,程序可以继续运行,但可能会有问题
  4. INFO (20): 普通信息,比如连接成功
  5. DEBUG (10): 调试信息,帮助理解程序运行过程 使用
    logging.basicConfig(level=logging.LEVEL_NAME) 来配置日志级别,LEVEL_NAME
    是要设置的级别名称,可以是 CRITICAL, ERROR, WARNING, INFO,DEBUG

如果你设置日志级别为 logging.WARNING,只会输出级别为 WARNING 及以上级别的日志信息.

例如:

logging.basicConfig(filename='example.log', level=logging.WARNING)

其他

logging.exception() 函数与 logging.error() 函数类似,但除了记录错误信息之外,它还会记录错误的调用栈。这使得它在调试时特别有用。
如果在之前已经调用了 logging.basicConfig(filename=‘example.log’) 来配置日志输出到文件,logging.exception(e) 会把错误信息记录到 example.log 文件中。如果没有进行配置,默认会在控制台输出错误信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值