从 .bat 切换到 .py - 重复记录

Switch from .bat to .py - duplicate logging

我有一套测试 运行 鼻子和 Python 2.7.

我曾经 运行 带有 runner.bat 文件的套件。

使用它,我会得到不错的日志输出,如下所示:

2015-02-10 16:28:28,759 - DEBUG - Firefox version: 35.0
2015-02-10 16:28:28,788 - DEBUG - Running against Production on firefox
etc.

出于多种原因(主要是添加的功能),我想将我的 .bat 移植到 .py

我制作了一个runner.py文件。它位于与 runner.bat 完全相同的目录中,但现在我的日志记录是重复的。

2015-02-10 17:04:57,315 - DEBUG - Firefox version: 35.0
2015-02-10 17:04:57,315 - DEBUG - Firefox version: 35.0
2015-02-10 17:04:57,355 - DEBUG - Running against Production on firefox
2015-02-10 17:04:57,355 - DEBUG - Running against Production on firefox

我尝试将 logger.propogate=False 添加到我的日志记录对象,但没有成功。任何人都知道为什么我在 运行 a .py?

时突然得到重复项

LogManager.py

def configure_logging():

    # Log to file    
    fileHandler = FileHandler(logging_path)
    formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
    fileHandler.setFormatter(formatter)
    logger.addHandler(fileHandler)

    logger.setLevel(logging.DEBUG)
    logger.propagate = False

configure_logging()

Runner.bat

@echo off
IF EXIST C:\TestOutput\version.txt del C:\TestOutput\version.txt

python C:\TestSuite\Utils\cleanup_logging_output_dir.py

nosetests -a level=gold

Runner.py

import os
import sys
import socket
import nose
import tempfile
import shutil


def prepare_tests():

    ... do lots of stuff ...

    os.system("python {} {}".format(clean_log_script, config_dir)

    nose_argv = [__file__, '-a', 'level=gold', '--with-id']

    ... augment nose_argv if needed based on other variables...

    return nose_argv

######################
### Run nosetests  ###
######################
test_argv = prepare_tests()
result = None

if __name__ == '__main__':
    # don't run tests on current file
    test_argv.extend(['--ignore-files', os.path.basename(__file__)])

    result = nose.run(argv=test_argv)

考虑在使用 logger.debug() 之前使用 logging_tree,像这样:

from logging_tree import printout; printout()

它将为您提供日志层次结构的漂亮打印输出,以及记录器是否设置了 Propagate OFF 的指示。确保您了解 returns 对您的意义,并且您已将 propagate = False 设置为正确的记录器。还要确保 运行 鼻子 -s 以便您可以看到打印输出。

Nose 似乎有问题。以下会产生重复的日志记录:

 logger = logging.getLogger("general_logger")

但是以下情况不会:

logger = logging.getLogger(__name__)