我要把头发扯下来。在
我需要一个系统日志处理程序。在
我找到了this: 在一个StackOverflow page上,发现该方法可以很好地独立工作,与该系统的syslog进行通信。在
但是,我不知道如何在日志配置文件中引用它。我使用的是python2.6.6,所以dict config不可用。我必须使用文件配置。根据docs,类名必须是相对于日志的,或者是python路径的完整规范。在
以下是我的配置文件部分:
[handler_syslog]
class=logext.HDSysLogHandler
level=WARN
formatter=timestamp
args=(7, )
logext是一个比我的main更深一层的包。在
它包含3个python文件和编译文件:
^{pr2}$init.py为空,仅用于生成一个包。在
在syslog.bridge.py基本上是上面提到的文件,只是对构造函数做了一些小的更改,使其更灵活,可以与Python2.6一起使用
class SysLogLibHandler(logging.Handler):
...
def __init__(self, identifier, n):
try:
syslog.openlog(identifier, syslog.LOG_PID, self.FACILITY[n])
except Exception , err:
print err
raise
# We got it
logging.Handler.__init__(self)
最后HDSysLogHandler.py具体如下:
from syslog_bridge import SysLogLibHandler
class HDSysLogHandler(SysLogLibHandler):
def __init__(self, local_facility):
SysLogLibHandler.__init__(self, "hdaudio", local_facility)
主模块的相关部分是:
import logging
import logging.config
import logext
...
logging.config.fileConfig('logging.conf')
当我的主应用程序运行时,我会看到:
Traceback (most recent call last):
File "Main.py", line 23, in <module>
logging.config.fileConfig('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: 'module' object is not callable
这是想告诉我什么?哪个模块不可调用?是谁想“打电话”呢?在
找到自制日志处理程序并在日志配置文件中指定它的正确方法是什么?在
我想你看到这个错误是因为
将类指定为
^{pr2}$logext.HDSysLogHandler
,它是一个模块,而不是一个类。不如试试看因为它指定了
HDSysLogHandler
类,它位于logext.HDSysLogHandler
模块内。在首先从平台特定文档开始:-)
Python2.6提供了SysLogHandler
如果您喜欢使用dict配置的日志配置,可以使用logutils包,它提供了在python2.6中可用的dictionary based configuration。在
我在Python2.6的
logutils
中使用了很多,对此我非常满意。后来迁移到Python2.7非常容易。在相关问题 更多 >
编程相关推荐