2015-02-10 5 views
0

У меня есть набор тестов, которые я запускаю с помощью Nose и Python 2.7.Переключиться с .bat на .py - дублировать ведение журнала

Я использовал для запуска пакета с файлом 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 к моему объекту регистрации, но не повезло. У кого-нибудь есть идеи относительно того, почему я вдруг получаю дубликаты при работе с .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) 

ответ

0

Появляется ошибка в Носе. Ниже производит дубликат регистрации:

logger = logging.getLogger("general_logger") 

Однако следующее: не

logger = logging.getLogger(__name__) 
1

Рассмотрите возможность использования logging_tree прямо перед тем, как использовать logger.debug(), что-то вроде этого:

from logging_tree import printout; printout() 

Это даст вам хорошую распечатку иерархии лесозаготовок, а также указание, если регистратор имеет Propagate OFF набор или нет. Убедитесь, что вы понимаете, что он возвращает вам, и вы установили propagate = False в нужные регистраторы. Также убедитесь, что вы носите нос с -s, чтобы вы могли видеть распечатку.

+0

Опрятного инструмент, logging_tree. Я вижу, что 'Propogate OFF' установлен для правильного регистратора, но есть дубликаты файлов обработчиков, следовательно, дублирование. Я запускаю 'printout()' сразу после того, как я 'configure_logging()'. Не знаю, почему дубликаты будут там так немедленно. – dbJones