【发布时间】:2014-06-11 14:13:04
【问题描述】:
我在扯头发。
我需要一个系统日志处理程序。
我找到了this: 在StackOverflow page 处,发现该方法独立工作正常,可以与该系统的系统日志进行通信。
但是,我不知道如何在我的日志记录配置文件中引用它。我使用的是 Python 2.6.6,所以我无法使用 dict config。我必须使用文件配置。根据文档,类名必须相对于日志记录或 python 路径的完整规范。
这是我的配置文件的部分:
[handler_syslog]
class=logext.HDSysLogHandler
level=WARN
formatter=timestamp
args=(7, )
logext 是一个比我的 main 更深一层的包。
它包含3个python文件和编译文件:
[logext]$ ls -al
total 32
drwxr-x---. 2 sc1478 dev 4096 Apr 25 11:50 .
drwxr-x---. 3 sc1478 dev 4096 Apr 25 11:50 ..
-rw-r-----. 1 sc1478 dev 243 Apr 25 11:50 HDSysLogHandler.py
-rw-r-----. 1 sc1478 dev 630 Apr 25 11:50 HDSysLogHandler.pyc
-rw-r-----. 1 sc1478 dev 2 Apr 25 11:50 __init__.py
-rw-r-----. 1 sc1478 dev 132 Apr 25 11:50 __init__.pyc
-rw-r-----. 1 sc1478 dev 2426 Apr 25 11:50 syslog_bridge.py
-rw-r-----. 1 sc1478 dev 2386 Apr 25 11:50 syslog_bridge.pyc
init.py是空白的,只是为了做一个包。
syslog.bridge.py 基本上就是上面提到的文件,只是对构造函数稍作改动,使其更加灵活并适用于 Python 2.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
这是想告诉我什么?什么模块不可调用?谁在试图“称呼它”?
找到自制的日志处理程序并在日志配置文件中指定它的正确方法是什么?
【问题讨论】:
标签: python logging python-2.6 syslog