我已经在代码中添加了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)
Run Code Online (Sandbox Code Playgroud)
我的配置文件中没有任何内容提供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
Run Code Online (Sandbox Code Playgroud)
这是我的主模块中的日志记录初始化代码:
import logging
import logging.config
import logging.handlers
logging.config.fileConfig('../conf/logging.conf')
logger = logging.getLogger('main')
Run Code Online (Sandbox Code Playgroud)
我不是在寻找我在这里做错了什么(尽管那会很好),而不是在寻找调试它的方法。
谢谢。
您可以深入研究Python源代码以研究此类问题。该库的大部分是用Python实现的,并且无需了解解释器的内部细节就可以很好地读取。hg.python.org提供了一个到存储库的Web界面,方便浏览。我找不到2.6的分支,但相关的语句在当前版本的第147行。
您可以看到它args是从一个eval生成的,该eval args从handler_*配置文件的每个部分获取密钥的值。然后使用unpack(*)操作扩展该args变量,以创建klass()的参数。
在您的配置文件中,您具有以下这一行:
args=('../log/audiosync.log')
Run Code Online (Sandbox Code Playgroud)
它是一个20个字符的字符串,将被解包为单个字符的元组,该字符串与self传递给的对象一起__init__占错误消息中的21个参数。您缺少制作1元素元组所需的结尾逗号:
args=('../log/audiosync.log',)
^-- missing
Run Code Online (Sandbox Code Playgroud)
该部分中存在相同的错误handler_syslog。
| 归档时间: |
|
| 查看次数: |
1128 次 |
| 最近记录: |