Python3添加日志级别

2023-11-25

我有这段代码,对我来说效果很好。

import logging
import logging.handlers

logger = None


def create_logger():
    global logger
    logger = logging.getLogger('Logger')
    logger.setLevel(logging.DEBUG)
    handler = logging.handlers.RotatingFileHandler("C:/Users/user/Desktop/info.log", maxBytes=1000000, backupCount=20)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(formatter)
    logger.addHandler(handler)


create_logger()
logger.info("Text info")
logger.debug("Text debug")
logger.warning("Text warning")
logger.error("Text error")
logger.critical("Text critical")

输出看起来很棒:

2017-12-19 15:06:43,021 - 记录器 - 信息 - 文本信息
2017-12-19 15:06:43,021 - 记录器 - 调试 - 文本调试
2017-12-19 15:06:43,022 - 记录器 - 警告 - 文本警告
2017-12-19 15:06:43,022 - 记录器 - 错误 - 文本错误
2017-12-19 15:06:43,022 - 记录器 - 关键 - 文本关键

好吧,我想添加一个新的日志记录级别,如下所示:

logger.message("Text message")  

输出应该是这样的

2017-12-19 15:06:43,022 - 记录器 - 消息 - 短信


From 记录文档(强调):

定义自己的级别是可能的,但应该不是必要的, 作为 现有水平是根据实际情况选择的 经验。但是,如果您确信需要自定义级别, 这样做时应格外小心,并且这可能是一个 如果您正在开发库,则定义自定义级别是非常糟糕的主意。 那是因为如果多个库作者都定义了自己的自定义 级别,有可能来自这样多个的日志输出 一起使用的库对于使用开发人员来说将很难 控制和/或解释,因为给定的数值可能意味着 不同的图书馆有不同的东西。

默认概述日志记录级别:

enter image description here

但如果您仍然愿意,您可以设置自己的日志级别:

In the logging-模块,_levelToName and _nameToLevel是日志名称和级别之间的映射。无需手动添加,addLevelName()函数会为你做这件事。

这里,一个新的日志记录级别称为MESSAGE添加了日志级别25:

import logging

# Define MESSAGE log level
MESSAGE = 25

# "Register" new loggin level
logging.addLevelName(MESSAGE, 'MESSAGE')  # addLevelName(25, 'MESSAGE')

# Verify
assert logging.getLevelName(MESSAGE) == 'MESSAGE'

如果您不想创建自己的记录器类但仍想记录其他日志级别,那么您可以使用Logger.log(level, msg)-传统记录器上的方法:

logging.log(MESSAGE, 'This is a message')

编辑:直接添加消息

 def message(self, msg, *args, **kwargs):
    if self.isEnabledFor(MESSAGE):
        self._log(MESSAGE, msg, args, **kwargs) 

使message()- 可用功能logging:

 logging.message = message
 # or setattr(logging, 'message', message)

使message()-记录器中可用的功能:

 logging.Logger.message = message
 # or setattr(logging.Logger, 'message', message)

制作自定义 Logger 类

您可以创建自己的记录器类来制作message(msg)- 方法,与其他方法类似地使用(例如info(msg), warning(msg), etc.)

在下面的示例中,一个新的记录器是用message(msg)- 记录方法MESSAGE:

class MyLogger(logging.Logger):
    def message(self, msg, *args, **kwargs):
        if self.isEnabledFor(MESSAGE):
            self._log(MESSAGE, msg, args, **kwargs)

获取记录器

我不确定让它工作的最佳方法是什么logging.getLogger(name),但下面有两种方法。 参考号评论,我相信第一种方法更好:

Either使新记录器成为默认记录类,这意味着新记录器实例将属于MyLogger类而不是默认类logging.Logger class:

logging.setLoggerClass(MyLogger)
logger = logging.getLogger('A new logger name')
logger.message('This seems to work')
assert isInstance(logger, MyLogger)

Or只需创建一个记录器实例并将其添加到loggerDict在活跃的logging.Manager实例 (EDIT:不推荐,见评论):

my_logger = MyLogger('Foo')
logging.Logger.manager.loggerDict['Foo'] = my_logger
logger = logging.getLogger('Foo')
logger.message('This is the same instance as my_logger')
assert logger is my_logger

使用新的日志级别

# Use the new logger class
logger.warning('Custom log levels might be a bad idea')
logger.message('Here is a message')
# Log with custom log level:
logger.log(MESSAGE, 'This is a message')

这假设MESSAGE被预定义为表示日志级别的整数数值。 (例如。25就像之前提到的)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3添加日志级别 的相关文章

  • Virtualenv 在 OS X Yosemite 上失败并出现 OSError

    我最近更新到 OSX Yosemite 现在无法使用virtualenv pip 每当我执行 virtualenv env 它抛出一个 OSError Command Users administrator ux env bin pytho
  • 使用 django-rest-framework 设置对象级权限

    尝试使用 django rest framework 最干净 最规范地管理 django guardian 对象级权限 我想将对象的读取权限 module view object 分配给在执行 POST 时发出请求的用户 我的基于阶级的观点
  • Mypy 无法从文字列表推断项目的类型

    我有一个变量x和一个文字列表 例如 0 1 2 我想转换x这些文字之一 如果x在列表中 我将其退回 否则我返回一个后备值 from typing import Literal Set Foo Literal 0 1 2 foos Set F
  • Series.sort() 和 Series.order() 有什么区别?

    s pd Series nr randint 0 10 5 index nr randint 0 10 5 s Output 1 3 7 6 2 0 9 7 1 6 order 按值排序并返回一个新系列 s order Output 2 0
  • 协程从未被等待

    我正在使用一个简单的上下文管理器 其中包含一个异步循环 class Runner def init self self loop asyncio get event loop def enter self return self def e
  • 如何确保 re.findall() 停止在正确的位置?

    这是我的代码 a import re re findall r lt title gt lt title gt a 结果是 title aaa
  • Python Tkinter 模块不显示输出

    我正在尝试学习 Python 并尝试使用 Python 中的 GUI 并遇到了这个 Tkinter 模块 我的代码运行 但运行时窗口没有出现 我的代码如下 from Tkinter import to create a root windo
  • 在Python上获取字典的前x个元素

    我是Python的新手 所以我尝试用Python获取字典的前50个元素 我有一本字典 它按值降序排列 k 0 l 0 for k in len dict d l 1 if l lt 51 print dict 举个小例子 dict d m
  • Arcpy 模数在 Pycharm 中不显示

    如何将 Arcpy 集成到 Pycharm 中 我尝试通过导入模块但它没有显示 我确实知道该模块仅适用于 2 x python arcpy 在 PyPi Python 包索引 上不可用 因此无法通过 pip 安装 要使用 arcpy 您需要
  • AttributeError:“模块”对象没有属性[重复]

    这个问题在这里已经有答案了 我有两个 python 模块 a py import b def hello print hello print a py print hello print b hi b py import a def hi
  • 根据其他单元格值更改多个单元格值

    我想更改包含的单元格moving to movingToOpenor movingToClose基于下一个单元格中给出的状态 有时循环会被中断并且不会从open to close or close to open 这是我当前的数据框 Dat
  • 是否需要关闭没有引用它们的文件?

    作为一个完全的编程初学者 我试图理解打开和关闭文件的基本概念 我正在做的一项练习是创建一个脚本 允许我将内容从一个文件复制到另一个文件 in file open from file indata in file read out file
  • 如何指示 urwid 列表框的项目数多于当前显示的项目数?

    有没有办法向用户显示 urwid 列表框在显示部分上方 下方有其他项目 我正在考虑类似滚动条的东西 它可以显示条目的数量 或者列表框顶部 底部的单独栏 如果这个行为无法实现 有哪些方法可以实现这个通知 在我的研究过程中 我发现这个问题 ht
  • AWS Lambda 不读取环境变量

    我正在编写一个 python 脚本来查询 Qualys API 中的漏洞元数据 我在 AWS 中将其作为 lambda 函数执行 我已经在控制台中设置了环境变量 但是当我执行函数时 出现以下错误 module initialization
  • minizinc python 安装

    我通过 anaconda 提示符在 python 上安装了 minizinc 就像其他软件包一样 pip install minizinc 该软件包表示已成功安装 我可以导入该模块 但是 我正在遵循基本示例https minizinc py
  • 如何给URL添加变量?

    我正在尝试从网站收集数据 我有一个 Excel 文件 其中包含该网站的所有不同扩展名 F i www example com example2 我有一个脚本可以成功从网站中提取 HTML 但现在我想为所有扩展自动执行此操作 然而 当我说 s
  • rpy2 无法加载外部库

    希望有人能帮忙解决这个问题 R版本 2 14 1rpy2版本 2 2 5蟒蛇版本 2 7 3 一直在尝试在 python 脚本中使用 rpy2 加载 R venneuler 包 该包以 rJava 作为依赖项 venneuler 和 rJa
  • 如何获取pandas中groupby对象中的组数?

    我想知道有多少个独特的组需要执行计算 给定一个名为 groupby 的对象dfgroup 我们如何找到组的数量 简单 快速 Pandaic ngroups 较新版本的 groupby API pandas gt 0 23 提供了此 未记录的
  • 如何(安全)将 Python 对象发送到我的 Flask API?

    我目前正在尝试构建一个 Flask Web API 它能够在 POST 请求中接收 python 对象 我使用 Python 3 7 1 创建请求 使用 Python 2 7 运行 API 该 API 设置为在我的本地计算机上运行 我试图发
  • 定义在文本小部件中双击时选择哪些字符

    在 Windows 上 双击文本小部件中的单词也将选择连接的标点符号 有什么方法可以定义您想要选择的角色吗 tcl wordchars该变量的值是一个正则表达式 可以设置它来控制什么被视为 单词 字符 例如 通过双击 Tk 中的文本来选择单

随机推荐

  • Resharper 8.1 测试运行器减慢 Visual Studio 文本编辑速度

    我有一个相当小的 C 解决方案 其中包含大约 5 个项目 我正在使用带有 Update 4 的 Visual Studio 2012 和 Resharper 8 1 内部版本 8 1 23 546 它采用配备 SSD 和 16GB RAM
  • Ruby on Rails 多态关系的优点和缺点 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 您知道 Ruby on Rails 多态关系有哪些优点和缺点 优点 您可以轻松地将任何东西链接到任何东西 适应性强的关系有助于适应不可预见的情况 很容易建立关系 非常适合临时系统
  • 如何使用 from_json 和 schema 作为字符串(即 JSON 编码的 schema)?

    我正在从 Kafka 读取一个流 并将 Kafka 的值 即 JSON 转换为 Structure from json有一个采用类型模式的变体String 但我找不到样本 请指出下面的代码有什么问题 Error Exception in t
  • Jboss 在根上下文中部署

    是的 我知道enable welcome root false 但在文件中找不到这个 使用 Wildfly Final 或 jboss eap 6 2 在哪儿 为什么我需要在 WEB INF 中添加 jboss web xml 有问题的文件
  • “@Transactional”应该放在服务层或 DAO 的哪里

    首先 我可能正在问一些以前被问过并回答过的问题 但我无法返回搜索结果 我们在服务层定义事务注释 典型的 Spring Hibernate CRUD 通常是 控制器 gt 管理器 gt Dao gt Orm 我现在遇到的情况是 我需要根据客户
  • 在谷歌地图android上实现落针动画

    我正在我的 Android 应用程序中实现谷歌地图 在此过程中我想添加落针动画 我已经搜索了所有内容 但找不到执行此操作的确切方法 任何人都可以帮助我如何做 这将是一个很大的帮助 将标记添加到地图中的所需位置 然后使用该标记调用此函数 pr
  • Python - PyQt - QTable Widget - 添加行

    我是 PyQt 的新手 无论如何仍然有点困惑 我有一个像这样的文本文件结构 姓名 姓氏 电话 电子邮件 空格实际上是制表符 t 现在当我用我的方法读取这个文件时 我希望填充 QTableWidget 我的 QTable Widget 有 4
  • C Int 和 Long 32 - 64 位中的值范围

    我对 C 中 Int 变量的值范围感到困惑 我知道 32 位 unsigned int 的范围是 0 到 65 535 那么只要有0到4 294 967 295 这在 32 位机器上没问题 但现在在 64 位机器中一切都保持不变吗 或者也许
  • 连接两个 gatsby 节点

    所以 我正在使用盖茨比 mdx用于从 MDX 文件创建站点的插件 我想在 SitePage 对象和 Mdx 对象之间创建关联 以便我可以对 SitePage 边缘执行一个 graphQL 查询来构建站点导航 我的大部分代码都是用 TypeS
  • 如何链接没有字幕的 YouTube 视频?

    可以链接吗youtubeHTML 代码中的视频不显示其字幕 字幕 假设我有以下视频 http www youtube com watch v kTvHIDKLFqc 它有默认的英文字幕 但是 当链接该视频时 我想在没有它们的情况下加载它 是
  • C++ 中正态分布的随机数

    作为 C 的完全初学者 我想从正态分布生成一个随机数 使用以下代码 源自此post 我能够这样做 include
  • 我可以在 Windows 7 上使用 C# .NET 开发 Blackberry 应用程序吗

    嘿 我非常有兴趣为黑莓操作系统构建一个应用程序 我可以用 C 来做吗 Blackberry 还推出了 Visual Studio 插件 但您将如何将其与模拟器一起使用 不 你做不到 你必须使用Java来做黑莓开发 黑莓曾经有一个 C C A
  • 使用 ggplot2 以粗体显示各个轴标签

    改编自这个问题和解决方案的问题 使用 ggplot2 以粗体突出显示各个轴标签 我想根据满足标准有选择地证明水平轴标签的合理性 因此 借用上述问题和答案 我设置了一个示例 require ggplot2 require dplyr set
  • 如何在 CSS 中用 div 制作尖箭头

    如何在 CSS 中制作尖箭头 不只是一个三角形 而是一个有茎的三角形 就像用弓射出的传统箭一样 我试图通过创建一个 div 容器来做到这一点 其中包含两个容器 左容器和右容器 右侧将包含三角形 左侧将包含三个 div 其中心将被着色以创建主
  • AdMob 在 Android 中需要哪些权限

    On 谷歌的网站他们只提到其中两个
  • 记录 Excel 自动完成的 VBA 代码

    使用VBA编写要在Excel中使用的自定义函数时 如何编写文档注释以便在自动填充公式期间自动显示Excel 例如 当我们开始输入 VLookUp 时 它会显示 Vlookup 作为工具提示的作用 显示输入变量名称 如果我们按功能区中的 插入
  • 静态变量被初始化两次

    考虑我在编译单元中有一个静态变量 它最终出现在static库 libA 然后我有另一个编译单元访问这个变量 最终出现在shared库 libB so 因此 libA 必须链接到 libB 最后我有一个 main 函数也直接从 A 访问静态变
  • iOS 7 - 调整状态栏

    我无法确定如何调整 iOS7 中的状态栏 我的视图控制器有一个tableView 我想要tableView在状态栏下启动 目前 它与状态栏重叠 顶部的标签是headerView in the tableView 我已通过 IB 在视图控制器
  • 矩阵列表中每个元素的平均值

    我有一个包含三个矩阵的列表 a lt matrix runif 100 b lt matrix runif 100 c lt matrix runif 100 mylist lt list a b c 我想获得三个矩阵中每个元素的平均值 我
  • Python3添加日志级别

    我有这段代码 对我来说效果很好 import logging import logging handlers logger None def create logger global logger logger logging getLog