python logging设置level失败的解决方法

当设置 Python logging 的 level(即日志等级)时,有时可能会遇到设定无效的情况。这种情况可能由多种原因引起,本攻略将提供几种常见的失败原因以及相应的解决方法。

问题1:未正确设置 logger 的名称

在 Python logging 中,每个 logger 都有一个唯一的名称。如果我们要设置某个 logger 的日志等级,我们需要指定该 logger 的名称。如果我们未能正确指定名称,则会导致设定无效。

以下示例展示了如何使用 Python logging 设置默认 logger 的日志等级为 WARNING:

import logging

logging.basicConfig()
logger = logging.getLogger()
logger.setLevel(logging.WARNING)

注意,我们在代码的第 3 行使用了 getLogger() 方法来获取默认 logger。如果我们在这里输入错误的名称,则会导致设置失败。

问题2:设置的 level 低于 handler 的 level

在 Python logging 中,除了 logger 之外,还有 handler。Handler 负责将日志发送到不同的目标(例如文件、网络等)。每个 handler 都有自己的日志等级(即 level 属性)。如果我们要设置某个 logger 的日志等级,我们需要先设置其添加过的 handler 的日志等级。如果我们设置的日志等级低于 handler 的日志等级,则会导致设定无效。

以下示例展示了如何使用 Python logging 在文件 example.log 和标准输出其中添加两个 handler,并设置其中一个 handler 的日志等级为 INFO。如果我们将 logger 的日志等级设置为 DEBUG,则所有的日志都会输出到文件和标准输出,因为 DEBUG 级别低于 INFO 级别:

import logging

logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)

file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.DEBUG)

console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

logger.addHandler(file_handler)
logger.addHandler(console_handler)

logger.debug('this message should be logged in both file and console')
logger.info('this message should only be logged in console')

注意,在代码的第 3 行之后,我们首先设置了 logger 的日志等级为 DEBUG。然而,我们在第 7 行和第 10 行设置了两个 handler 的日志等级分别为 DEBUG 和 INFO。由于 DEBUG 级别低于 INFO 级别,所以 logger 在输出日志时会忽略所有等级为 INFO 及以下的日志。因此,在第 15 行的日志信息只会显示在控制台上,而不会被写入日志文件。

通过以上示例,我们可以看到日志级别、logger 和 handler 之间的关系非常重要。只有当所有这些层次上的级别都设置正确,才能使日志输出达到我们的预期。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python logging设置level失败的解决方法 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • python3使用SMTP发送简单文本邮件

    Python3可以使用SMTP库进行邮件的发送,SMTP库支持普通文本邮件和HTML邮件发送,其中文本邮件发送较为简单,下面将讲述如何使用SMTP库发送简单文本邮件的完整攻略。 1. 导入SMTP库 Python3自带了SMTP库,导入该库后即可进行邮件的发送操作。 import smtplib 2. 邮件服务器登录 在发送邮件前,需要使用登录邮箱的SMTP…

    python 2023年5月20日
    00
  • 如何格式化文件输出 Python 3

    【问题标题】:How to format the file output Python 3如何格式化文件输出 Python 3 【发布时间】:2023-04-03 19:50:01 【问题描述】: 我制作了一个询问用户姓名和年龄的代码。它询问年龄并使用以下方式存储它: name = input(“”) 并且名称使用相同。我已经像这样将年龄输出到文件中: f …

    Python开发 2023年4月8日
    00
  • python银行系统实现源码

    下面我将为大家详细讲解”Python银行系统实现源码”的完整攻略。 1. 实现功能 这个程序主要实现的功能有:开户、存款、取款、转账、查询、修改密码和删除账户等操作。 2. 程序结构 该程序的实现比较复杂,共包含了6个Python脚本文件,分别为:- main.py(主程序)- user.py(用户类)- db.py(数据库操作类)- admin.py(管理…

    python 2023年5月19日
    00
  • jupyter notebook使用argparse传入list参数

    当我们在使用Jupyter Notebook编写Python程序时,我们需要为程序传递一些参数,而argparse是Python标准库中处理命令行参数的功能库。在使用argparse时,我们可能需要传入列表类型的参数,本文将详细讲解如何使用argparse传入列表参数。 第一步:引入argparse库 在Python中,我们需要先引入argparse库,这可…

    python 2023年6月3日
    00
  • 用python做游戏的细节详解

    用Python做游戏的细节详解 概述 Python是一门多用途的编程语言,除了数据分析和Web开发,我们还可以使用它来开发游戏。Python有许多适用于游戏开发的库和工具,可以让我们轻松地创建各种类型的游戏,从简单的文字游戏到精美的3D游戏。 在本文中,我们将探讨一些Python游戏开发的细节,并提供一些示例说明,以帮助新手更轻松地上手。 游戏开发的准备工作…

    python 2023年6月6日
    00
  • 简单说明Python中的装饰器的用法

    下面就详细讲解一下Python中的装饰器用法。 什么是装饰器 装饰器是Python中非常重要的一个语法特性,它本质上是函数,但是和普通函数又不同。它的作用是装饰已有的函数或类,添加一些额外的功能,而不需要修改被装饰对象的源代码。 装饰器的用法 1. 函数装饰器 函数装饰器是使用最广泛的装饰器类型。它的用法是在函数定义前面添加一行@decorator_name…

    python 2023年6月2日
    00
  • 在 Python 中使用条件元组对数据进行子集化

    【问题标题】:Subset data using a tuple of conditions in Python在 Python 中使用条件元组对数据进行子集化 【发布时间】:2023-04-04 14:08:01 【问题描述】: 我有一个输入数据框和一个元组列表。使用我将用来过滤数据框的元组列表。元组的结构如下: [(column_name1, min_v…

    Python开发 2023年4月6日
    00
  • Python字符串的拆分与连接详解

    Python字符串的拆分与连接是Python编程中十分常见且重要的操作。本文将从字符串的含义、字符串拆分和字符串连接三个方面详细讲解Python字符串的拆分与连接。 字符串的含义 字符串指的是一串符号的集合,在Python中用一对引号(’ ‘或” “)括起来表示。字符串可以是数字、字母、符号等一切可以使用键盘输入的内容。在Python中,字符串是不可变的,也…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部