Python日志记录配置文件模块和包

2024-05-07 16:32:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我要把头发扯下来。在

我需要一个系统日志处理程序。在

我找到了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

这是想告诉我什么?哪个模块不可调用?是谁想“打电话”呢?在

找到自制日志处理程序并在日志配置文件中指定它的正确方法是什么?在


Tags: 文件pyimportselfconfiginitlogging配置文件
2条回答

我想你看到这个错误是因为

class=logext.HDSysLogHandler

将类指定为logext.HDSysLogHandler,它是一个模块,而不是一个类。不如试试看

^{pr2}$

因为它指定了HDSysLogHandler类,它位于logext.HDSysLogHandler模块内。在

首先从平台特定文档开始:-)

Python2.6提供了SysLogHandler

如果您喜欢使用dict配置的日志配置,可以使用logutils包,它提供了在python2.6中可用的dictionary based configuration。在

我在Python2.6的logutils中使用了很多,对此我非常满意。后来迁移到Python2.7非常容易。在

相关问题 更多 >