如何在 python 中创建非 root 记录器

2024-01-04

我正在尝试使用logging.getLogger(‘child’)在子python模块中创建一个非根记录器,但我收到错误“找不到记录器‘child’的处理程序”

我正在尝试将父模块日志记录到父日志文件中。父模块将创建子模块的实例,我希望子模块写入自己的子日志文件,而不将其消息传播到父日志文件。

这是我的父模块的内容(由用户执行):

#!/usr/bin/env python

import logging, child

logging.basicConfig( filename='parent.log' )
logging.warning( 'test log from parent' )

c = child.run()

这是子模块:

import logging
class run:
  def __init__(self):
    logging.basicConfig( filename = 'child.log' )
    childLogger = logging.getLogger( __name__ )
    childLogger.propagate = False
    childLogger.warning( 'this is a log from the child' )

预期输出有 2 个文件:parent.log(包含来自父模块的 1 个警告行)和 child.log(包含来自子模块的 1 个警告行)。

实际输出是:一个警告行(来自父级)被打印到parent.log 文件中,并且没有child.log 文件——子级日志消息没有记录在任何地方。

你能告诉我我错过了什么吗?蒂亚!


Replace

logging.basicConfig(filename='child.log')
childLogger = logging.getLogger(__name__)

在你的子模块中:

childLogger = logging.getLogger(__name__)
childLogger.addHandler(logging.FileHandler('child.log'))

或者,或者,使用字典配置 https://docs.python.org/2/library/logging.config.html#logging.config.dictConfig or 文件配置 https://docs.python.org/2/library/logging.config.html#logging.config.fileConfig在一处配置日志记录。

出了什么问题基本配置 https://docs.python.org/2/library/logging.html#logging.basicConfig?来自文档:

如果根记录器已为其配置了处理程序,则此函数不会执行任何操作。

所以基本上,你打电话给basicLogging在子模块中没有任何效果,因为第一个模块(在父模块中)已经配置了根记录器。并通过设置子记录器的propagate to false,子级的日志条目不会转发到根记录器,因此您得到No handlers could be found...警告。

Edit

只是为了详细说明文件配置 https://docs.python.org/2/library/logging.config.html#logging.config.fileConfig,这提供了很大的灵活性,您可以为您的模块创建一个名为的文件logging.ini:

[loggers]
keys=root,child

[handlers]
keys=logfile,logfile_child

[formatters]
keys=default

# loggers

[logger_root]
level=INFO
handlers=logfile

[logger_child]
level=INFO
handlers=logfile_child
qualname=child
propagate=0

# handlers

[handler_logfile]
class=FileHandler
formatter=default
args=('parent.log',)

[handler_logfile_child]
class=FileHandler
formatter=default
args=('child.log',)

# formatters

[formatter_default]
format=%(asctime)s [%(module)s:%(lineno)d] %(levelname)s %(message)s
datefmt=

然后,在您的应用程序中的某个地方,您只需要调用fileConfig:

import logging.config

logging.config.fileConfig('logging.ini')

通过这种方式,您的日志记录可以在一个地方进行配置,这样可以更轻松地添加其他记录器、更改日志级别等。

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

如何在 python 中创建非 root 记录器 的相关文章

  • Mac OS 上的诗歌安装失败,显示“should_use_symlinks”

    我正在尝试使用以下命令安装诗歌 curl sSL https install python poetry org python3 但它失败了 但有以下例外 例外 此版本的 python 无法在不使用符号链接的情况下创建 venvs 下面是详
  • Sublime Text 插件开发中的全局 Python 包

    一 总结 我不知道 Sublime Text 插件开发人员如何使用 Sublime Text 查找全局 Python 包 而不是 Sublime Text 目录的 Python 包 Sublime Text使用自己的Python环境 而不是
  • 使用 pygame 显示 unicode 符号

    我检查了其他答案 但不明白为什么我的代码错误地显示 This is what I currently see https i stack imgur com 8tNIK png 这是关于文本渲染的相关代码 font pygame font
  • python 中的并行处理

    在 python 2 7 中进行并行处理的简单代码是什么 我在网上找到的所有示例都很复杂 并且包含不必要的代码 我该如何做一个简单的强力整数分解程序 在每个核心 4 上分解 1 个整数 我真正的程序可能只需要2个核心 并且需要共享信息 我知
  • 使用 python 中的公式函数使从 Excel 中提取的值的百分比相等

    import xlrd numpy excel Users Bob Desktop wb1 xlrd open workbook excel assignment3 xlsx sh1 wb1 sheet by index 0 colA co
  • 用缺失的日期填充其他列 Nan Pandas DataFrame

    我实际上是从几个 Excel 文件中提取数据来监控我的每日卡路里摄入量 我设法使用列表理解来生成日期 我尝试使用合并或连接 但它不起作用 ValueError 您正在尝试合并对象和 float64 列 date list 2021 05 2
  • 如何检查python xlrd库中的excel文件是否有效

    有什么办法与xlrd库来检查您使用的文件是否是有效的 Excel 文件 我知道还有其他库可以检查文件头 我可以使用文件扩展名检查 但为了多平台性我想知道是否有任何我可以使用的功能xlrd库本身在尝试打开文件时可能会返回类似 false 的内
  • Kivy - 有所有颜色名称的列表吗?

    在 Kivy 中 小部件 color属性允许输入其值作为字符串颜色名称 也 例如在 kv file Label color red 是否有所有可能的颜色名称的列表 就在这里 来自Kivy 的文档 https kivy org doc sta
  • 保留完整姓氏,在 pandas 列中获取名字的首字母(如果有的话,还有中间名)

    我有一个 pandas 数据框 其中有一列表示几位网球运动员的姓氏和姓名 如下所示 Player 0 Roddick Andy 1 Federer Roger 2 Tsonga Jo Wilfred 我想保留完整的姓氏并获取姓名的首字母和中
  • 删除 Django 1.7 中的应用程序(和关联的数据库表)

    是否可以使用 Django 1 7 迁移来完全删除 卸载应用程序及其所有跟踪 主要是其所有数据库表 如果没有 在 Django 1 7 中执行此操作的适当方法是什么 python manage py migrate
  • sklearn 中的 pca.inverse_transform

    将我的数据拟合后 X 我的数据 pca PCA n components 1 pca fit X X pca pca fit transform X 现在 X pca 具有一维 当我根据定义执行逆变换时 它不是应该返回原始数据 即 X 二维
  • 结构差异 sudo() run('sudo 命令')

    我想知道函数之间有什么区别sudo 和函数run sudo u user smth 文档上有 sudo 在所有运行方式上都是相同的 除了它总是换行 调用 sudo 程序中的给定命令以提供超级用户 特权 但有几次 sudo cmd 提示我输入
  • 从扫描文档中提取行表 opencv python

    我想从扫描的表中提取信息并将其存储为 csv 现在我的表提取算法执行以下步骤 应用倾斜校正 应用高斯滤波器进行去噪 使用 Otsu 阈值进行二值化 进行形态学开局 Canny 边缘检测 进行霍夫变换以获得表格行 去除重复行 10像素范围内相
  • 在 Windows 上使用 apache mod_wsgi 运行 Flask 应用程序时导入冲突

    我允许您询问我在 Windows 上使用您的 mod wsgi portage 托管 Flask 应用程序时遇到的问题 我有两个烧瓶应用程序 由于导入冲突 只有一个可以同时存在 IE 如果请求申请 1 我有回复 然后 如果我请求应用程序 2
  • Tensorflow 与 Keras 的兼容性

    我正在使用 Python 3 6 和 Tensorflow 2 0 并且有一些 Keras 代码 import keras from keras models import Sequential from keras layers impo
  • Geodjango距离查询未检索到正确的结果

    我正在尝试根据地理位置的接近程度来检索一些帖子 正如您在代码中看到的 我正在使用 GeoDjango 并且代码在视图中执行 问题是距离过滤器似乎被完全忽略了 当我检查查询集上的距离时 我得到了预期距离 1m 和 18km 但 18km 的帖
  • SMTP_SSL SSLError: [SSL: UNKNOWN_PROTOCOL] 未知协议 (_ssl.c:590)

    此问题与 smtplib 的 SMTP SSL 连接有关 当与 SMTP 无 ssl 连接时 它正在工作 在 SMTP SSL 中尝试相同的主机和端口时 出现错误 该错误仅基于主机 gmail 设置也工作正常 请检查下面的示例 如果 Out
  • 在 keras 中保存和加载权重

    我试图从我训练过的模型中保存和加载权重 我用来保存模型的代码是 TensorBoard log dir output model fit generator image a b gen batch size steps per epoch
  • 如何与其他用户一起使用 pyenv?

    如何与其他用户一起使用 pyenv 例如 如果我在用户 test 的环境中安装了 pyenv 则当我以 test 身份登录时可以使用 pyenv 但是 当我以其他用户 例如 root 身份登录时如何使用 pyenv 即使你这么做了 我也会s
  • 从 pandas DataFrame 中删除少于 K 个连续 NaN

    我正在处理时间序列数据 我在从数据帧列中删除小于或等于阈值的连续 NaN 时遇到问题 我尝试查看一些链接 例如 标识连续 NaN 出现的位置以及计数 Pandas NaN 孔的游程长度 https stackoverflow com que

随机推荐

  • 如何在 Linux 或 Macos 中编译适用于 Windows 的静态 .lib 库

    我正在寻找在 Linux 或 Macos 中编译 Windows 静态库的方法 似乎有交叉编译器可以为 Windows 生成 a 库 例如this one https stackoverflow com questions 4624078
  • Tailwind CSS:隐藏一个div并将其替换为另一个

    我想做的是 当有人将鼠标悬停在图像 div 上时 中间标题将被隐藏并替换为我想要显示的一些文本 我已经尝试了 100 种方法来实现这一目标 但从未完全奏效 寻找解决方案 div class flex flex row h screen bg
  • Scala 中丰富的枚举

    我正在寻找一种在 Scala 中实现丰富枚举的机制 就像在 Java 中向枚举添加抽象方法并在枚举的实例中实现它们一样 请注意 使用密封特征和案例对象不是一个解决方案 因为我将无法迭代现有的案例对象 除非我维护它们的列表 这对于更改非常脆弱
  • 将 XML 中的数据字段提取到 Excel 中

    我有一个巨大的 Excel 电子表格 其中包含客户记录 其中每一列都是一个字段 有一个名为 人口统计 的字段 其中包含客户的调查结果 并且完全采用 XML 格式 也就是说 每个客户都有一份关于其人口统计信息的调查结果 如性别 婚姻状况 收入
  • 未定义的变量 php 通知解决方法?

    我只是打开通知 因为它有一些我调试时需要的重要信息 话虽这么说 我发现未定义的变量真的很痛苦 例如 要删除未定义的变量通知 我必须输入以下代码 if the month row the month into if isset the mon
  • Spring:在 JUnit 测试中测试 JSP 输出

    我们有一个 API 它返回 JSP 作为视图 例如 RequestMapping value cricket matchId method RequestMethod GET public String getCricketWebView
  • 使用模板输入变量的 Angular 2 自定义结构指令绑定不起作用

    我创建了一个类似于的自定义结构指令ngFor 当我尝试使用它时
  • 使用 Plots.jl 有效地对子图进行动画处理

    我正在尝试使用 Plots jl 和 GR 后端在 Julia 中创建具有三个子图 一个表面 两个热图 的动画 到目前为止 我的代码中最慢的部分是这些图的生成 因此我试图找到最有效的方法来完成它 我尝试重新调用动画循环内的绘图 但这比就地修
  • C#:带有 SocketAsyncEventArgs 的 SSL?

    我正在使用 C NET 开发套接字服务器 我使用 SocketAsyncEventArgs 类提供的异步模型 因为它必须是高性能服务器才能在短时间内支持许多连接 接下来 我想确保之间的通信安全 客户端和服务器 我想我可以使用 SSL 有没有
  • 如何在 onedriveAPI 的请求正文中指定 @microsoft.graph.conflictBehavior

    我正在开发一个具有以下要求的 C 项目 如果文件夹不存在则创建一个 检查是否已经存在 如果存在则增加文件名 来自 Onedrive API 文档在 OneDrive 中创建新文件夹 https dev onedrive com items
  • django:更改扩展模型类的默认值

    我早些时候发布了类似的问题 但这个问题有所不同 我有一个相关类的模型结构 例如 class Question models Model ques type models SmallIntegerField default TYPE1 Cho
  • MySQL 无法启动 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 当我尝试启动 MySQL 时 我得到 ERROR 2002 HY000 Can t connect to local MySQL server thr
  • 代码::块中的 C DLL

    我在 Code Blocks 中找不到有关如何创建 C DLL 的任何信息 每当我尝试查找它时 它都会显示在托管编程语言中使用 C DLL 的链接 Code Blocks 没有提供 C DLL 的选项 我该怎么办 文件 gt 新建 gt 项
  • 如何通过 telethon 获取 telegram 私人频道 id

    您好 不知道如何解决这个问题 因此我们将非常感谢任何帮助 我订阅了私人频道 该频道没有用户名 我也没有邀请链接 管理员刚刚添加了我 由于我在工作中使用此频道 为了加快处理速度 我想使用 Telethon 处理在该频道上发布的消息 该方案的核
  • 使用 glm 指定 R 中的公式,无需显式声明每个协变量

    我想将特定变量强制纳入 glm 回归 而不完全指定每个变量 我的真实数据集有大约 200 个变量 到目前为止 我在网上搜索中还没有找到这样的样本 例如 只有 3 个变量 n 200 set seed 39 samp data frame W
  • 将逗号分隔的字符串转换为日期时间

    Exchange Web 服务有一个方法 采用以下格式获取日期时间 appointment Start new DateTime 2014 03 04 11 30 00 我有一个字符串 它是通过连接各个字段形成的日期 我的字符串如下所示 s
  • 如何在 Windows 中重新启动远程计算机上的服务? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 有时在调试时 我需要重新启动远程计算机上的服务 目前 我正在通过远程桌面执行此操作 如何从本地计算机上的命令行完成此操作 您可以使用服务控制台 单击左
  • Visual Studio 2017 网站菜单“启用 C# 6 / VB 14”无法加载 Nuget 包

    一段时间以来 每当我单击网站菜单 启用 C 6 VB 14 时 我都会收到一条异常消息 指出在以下主要资源中找不到 Package Microsoft CodeDom Providers DotNetCompilerPlatform 1 0
  • GIT 是否可以仅在一个分支中跟踪文件,而不能在其他分支中跟踪文件?

    我使用 GitFlow 作为 git 工作流程 我为电子微控制器编程 当我在开发分支时 我不需要跟踪或提交已编译的 HEX 文件 我只需要代码 但是当我在发布或主分支上时 我确实需要提交生成的十六进制文件 目前 我 在精神上 忽略了 HEX
  • 如何在 python 中创建非 root 记录器

    我正在尝试使用logging getLogger child 在子python模块中创建一个非根记录器 但我收到错误 找不到记录器 child 的处理程序 我正在尝试将父模块日志记录到父日志文件中 父模块将创建子模块的实例 我希望子模块写入