从 .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__)
我有一套测试 运行 鼻子和 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__)