如何调试 Python 日志记录配置文件错误

2024-05-01

我已将 Python 的日志记录模块添加到我的代码中,以避免混乱的打印语句,但我却因配置错误而陷入困境。错误消息的信息不是很丰富。

Traceback (most recent call last):
  File "HDAudioSync.py", line 19, in <module>
    logging.config.fileConfig('../conf/logging.conf')
  File "/usr/lib64/python2.6/logging/config.py", line 84, in fileConfig
    handlers = _install_handlers(cp, formatters)
  File "/usr/lib64/python2.6/logging/config.py", line 162, in _install_handlers
    h = klass(*args)
TypeError: __init__() takes at most 5 arguments (21 given)

我的配置文件中没有提供 21 个参数。

这是配置文件

[loggers]
keys=root,main, sftp, jobapi

[handlers]
keys=console, logfile, syslog

[formatters]
keys=simple, timestamp

[logger_root]
level=NOTSET
handlers=logfile

[logger_main]
level=DEBUG
handlers=console, logfile, syslog
propagate=1
qualname=main


[logger_sftp]
level=DEBUG
handlers=console, logfile, syslog
propagate=1
qualname=sftp


[logger_jobapi]
level=DEBUG
handlers=console, logfile, syslog
propagate=1
qualname=jobapi

[handler_console]
class=StreamHandler
level=DEBUG
formatter=simple
args=(sys.stdout,)

[handler_logfile]
class=FileHandler
level=DEBUG
formatter=timestamp
args=('../log/audiosync.log')


[handler_syslog]
class=FileHandler
level=WARN
formatter=timestamp
args=('../log/audiosync.sys.log')

[formatter_simple]
format=%(levelname)s - %(message)s

[formatter_timestamp]
format=%(asctime)s - %(name)s -%(levelname)s - %(message)s

这是我的主模块中的日志记录初始化代码:

import logging
import logging.config
import logging.handlers

logging.config.fileConfig('../conf/logging.conf')
logger = logging.getLogger('main')

我并不是在寻找我在这里做错了什么(尽管这很好),而是在寻找一种调试方法。

Thanks.


您可以深入研究 Python 源代码来调查此类问题。该库的大部分内容都是用 Python 实现的,并且具有良好的可读性,无需了解解释器的内部细节。hg.python.org http://hg.python.org/cpython/file/a8f3ca72f703/Lib/logging/config.py为存储库提供了方便浏览的 Web 界面。我找不到 2.6 的分支,但相关声明位于当前版本的第 147 行。

你可以看到args是从 eval 生成的,该 eval 正在获取值args每个的钥匙handler_*配置文件的部分。然后使用 unpack (*) 操作扩展该 args 变量,为 klass() 创建参数。

在你的配置文件中有这一行:

args=('../log/audiosync.log')

它是一个 20 个字符的字符串,被解包为单个字符的元组,其中包含self对象传递给__init__,占错误消息中的 21 个参数。您缺少创建 1 元素元组所需的尾随逗号:

args=('../log/audiosync.log',)
                            ^-- missing

同样的错误出现在handler_syslog部分。

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

如何调试 Python 日志记录配置文件错误 的相关文章

随机推荐

  • .net框架中值类型和引用类型的内存分配

    我可以阅读一篇高级文章来解释如何在 net 框架中为不同类型 值和引用 分配内存 例如 我们知道值类型是在堆栈上分配空间的 但它是如何管理的呢 另外 如何在堆中管理引用类型以及实际值存储在哪里 引用类型像任何Class一样都会包含很多值类型
  • CKAsset 不会显示在表格视图图像中

    我在 cloudkit DB 中有一个可选图像 已检查数据库 并且在我在测试中添加它的情况下该图像就在那里 我创建了一个类 它将记录字段初始化为我在表视图中使用的变量 我也有一个定制单元 但图像不会显示在我的自定义表格视图单元格中 我不知道
  • 启用JConsole远程监控是否会影响生产中的系统性能?

    Oracle Sun 说只要不在生产环境中本地运行就可以吗 http download oracle com javase 1 5 0 docs guide management jconsole html http download or
  • 如何用 C# 实现自己的 TaS-Lock?

    因此 对于分配 我们需要选择使用 C Lock 或使用自行实现的 TaS Lock 我读到的有关 TaS Locks 的内容是 它使用 1 个原子步骤来读取和写入一个值 有人建议我们为此使用 C 中的 Interlocked 类 到目前为止
  • ASP.NET MaskedEditExtender 和 TextBox:无法输入零,解决方法吗?解决方案?

    我正在尝试在连接到 MaskedEditExtender 的文本框中输入 0 我的掩码设置为 NUMBER 13 2 其中 9999999999999 99 作为我的十进制掩码 问题是用户必须输入一个数字 该值可以为0 我测试了多次尝试尝试
  • 字符串中的换行符未写入文件

    我正在尝试编写一个程序来操作从文件中读取的 unicode 字符串 我想到了两种方法 一种方法是读取包含换行符的整个文件 执行几个正则表达式替换 然后将其写回另一个文件 另一种方法是读取包含换行符的整个文件 执行几个正则表达式替换 然后将其
  • 如何在 Android Studio 中显示丰富的布局编辑器? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 如何显示或使用 Android Studio 中讨论的丰富布局编辑器 更多信息我是 Java 新手 刚刚下载了 Android Studio 并创建了
  • CSS“Shrinkwrap”方法如何与 max-width 一起使用并且没有 BR 换行标记?

    我正在尝试创建一个最大宽度边界框 它将包裹文本 在空格上 不允许断字 并收缩到最长文本行的宽度 有关各种收缩包裹方法的演示 请参见http www brunildo org test IEMshrink to fit html http w
  • Android SQLite 通配符

    我正在尝试使用通配符元素进行查询 以在 SQLite 表中搜索特定变量中任意位置具有元素的条目 public String getCheckoutEntry String title String ISBN Wild card Syntax
  • 在哪里可以找到 Fluent NHibernate 教程?

    我用谷歌搜索并环顾四周 是否有人知道任何隐藏的宝石不在谷歌搜索的前几页中 The wiki https github com jagregory fluent nhibernate wiki 是你最好的选择 我有过几个流畅的 NHibern
  • 骆驼:我如何异步发送到端点

    如何在不等待端点的路由被处理的情况下向端点发送消息 也就是说 我的路由应该只分派消息并完成 wireTap endpoint 就是答案
  • Fabric.js canvas.toDataURL() 通过 Ajax 发送到 PHP

    当我需要创建具有透明背景的图像时 我遇到了问题 我还是不知道问题出在fabricjs还是php 当我发送带有彩色背景的图像时 一切正常 当我发送具有透明背景的图像时会出现问题 生成的图像是用黑色背景创建的 那么 让我更好地解释一下 当用户单
  • 无法使用 Rails 3.2 创建插件?

    我在最新版本中遇到了 Rails 问题 我创建了一个新应用程序 rails new MyProject 但我没有脚本 生成 只有脚本 rails 当我输入时 ruby script rails generate plugin my plug
  • 调用多个ajax调用

    ajax url jsonpCallback item contentType application json dataType jsonp success function data console log data var marku
  • 为什么存储开销会在 C# 数据类型中产生浪费?

    在副主题中存储开销 关于章节 C 5 0 简而言之书上有这样一条一般性注释 现在 我想知道为什么 struct 中的字段A造成空间浪费 或者 作者整篇笔记的要点是什么 Each byte字段占用1个字节 而每个long字段占用8个字节 这意
  • FirebaseRemoteConfigClientException:Firebase 安装无法获取用于提取的安装身份验证令牌

    我遇到异常 com google firebase remoteconfig FirebaseRemoteConfigClientException Firebase Installations failed to get installa
  • 如何删除因缩小以适合元素而自动换行引起的额外空间?

    我正在尝试使用收缩来贴合 container 它可以完美地工作 直到它包含的元素换行为止 这会使其扩展到 180 像素 screen dimensions width 250px height 100px background color
  • 串流期货列表的最有效方式

    我通过流式传输对象列表来调用异步客户端方法 该方法返回 Future 迭代调用后返回的 Future 列表的最佳方法是什么 以便处理先出现的 Future 注意 异步客户端仅返回 Future 而不返回 CompletableFuture
  • 如何获取ISP名称?

    如何在 Salesforce com 中捕获用户的 ISP 名称 该解决方案可以采用 Salesforce com 中的 JavaScript 例如 Apex VisualForce Pages 捕获用户 ISP 名称的网站示例是 http
  • 如何调试 Python 日志记录配置文件错误

    我已将 Python 的日志记录模块添加到我的代码中 以避免混乱的打印语句 但我却因配置错误而陷入困境 错误消息的信息不是很丰富 Traceback most recent call last File HDAudioSync py lin