记录模块在python 2.4上无法正常工作

时间:2014-08-07 16:54:54

标签: python logging python-2.4

我在使用多个流处理程序在python 2.4中使用日志时遇到了问题。这是在运行64位内核2.6.32的linux主机上运行。

当我使用如下的基本日志记录时,它可以正常工作:

logging.basicConfig(filename=logfile, filemode="w", level=logging.INFO, datefmt='%Y-%m-%d %H:%M:%S', format=logformat)
logging.info("Hello world")

对于我当前的项目,我想要记录到文件和控制台(并最终到syslog),我无法让它工作。我没有得到任何错误,只是没有记录任何东西。日志文件已创建但为空。 (文件大小= 0)

这是我的代码:

config = {
            'debug':            1,
            'verbose':          1,
            'logdir':           '/tmp',
            'logfilename':      'JobRunner.log'
         }

def initLogging(config):

    logfile   = os.path.join(config['logdir'], config['logfilename'])
    print "DEBUG: logfile=%s" % logfile
    loglevel  = logging.INFO
    logformat = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s')

    if config['debug']:
        loglevel = logging.DEBUG

    if not os.path.exists(config['logdir']):
        os.makedirs(config['logdir'])

    try:
        logger = logging.getLogger('core')
        filelogger = logging.FileHandler(logfile, 'w')
        # dummy down my code and use the module var instead of using my loglevel var
        filelogger.setLevel(logging.DEBUG)
        filelogger.setFormatter(logformat)
        logger.addHandler(filelogger)
    except Exception, error:
        print "error: %s" % error

    try:
        if config['verbose']:
            console = logging.StreamHandler()
            console.setLevel(logging.DEBUG)
            console.setFormatter(logformat)
            logger.addHandler(console)
    except Exception, error:
        print "error: %s" % error

    try:
        logger.info("script initiated")
        logger.info("log file '%s' opened." % logfile)
    except Exception, error:
        print "error: %s" % error

    return logger

if __name__ == "__main__":
    log = initLogging(config)
    log.info("Hello")

我不确定问题出在哪里。此代码与我在本网站上找到的其他几个已接受的答案相匹配。

1 个答案:

答案 0 :(得分:0)

您还需要在记录器上设置级别

logger.setLevel(logging.DEBUG if config['debug'] else logging.INFO)

否则,它只会配置为logging.WARNING及以上:

>>> log = initLogging({'logdir': '/tmp', 'logfilename': 'test.log',
                       'debug': False, 'verbose': True})
>>> log.getEffectiveLevel()
30
>>> log.setLevel(logging.INFO)
>>> log.info('Hello')
2014-08-07 18:13:19,035 INFO     Hello
>>> print open('/tmp/test.log').read()
2014-08-07 18:13:19,035 INFO     Hello

如果您希望特定处理程序过滤掉消息,则 设置处理程序上的级别;它们最初设置为NOTSET,以便它们可以处理记录器处理的任何内容。