2016-09-30 3 views
3

У меня есть программа python, которая использует многопроцессорность для повышения эффективности и функцию, которая создает регистратор для каждого процесса. Функция регистратор выглядит следующим образом:Python logging setLevel() не действует

import logging 
import os 

def create_logger(app_name): 
    """Create a logging interface""" 
    # create a logger 
    if logging in os.environ: 
     logging_string = os.environ["logging"] 
     if logging_string == "DEBUG": 
      logging_level = loggin.DEBUG 
     else if logging_string == "INFO": 
      logging_level = logging.INFO 
     else if logging_string == "WARNING": 
      logging_level = logging.WARNING 
     else if logging_string == "ERROR": 
      logging_level = logging.ERROR 
     else if logging_string == "CRITICAL": 
      logging_level = logging.CRITICAL 
    else: 
     logging_level = logging.INFO 

    logger = logging.getLogger(app_name) 
    logger.setLevel(logging_level) 

    # Console handler for error output 
    console_handler = logging.StreamHandler() 
    console_handler.setLevel(logging_level) 

    # Formatter to make everything look nice 
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
    console_handler.setFormatter(formatter) 

    # Add the handlers to the logger 
    logger.addHandler(console_handler) 

    return logger 

И мои функции обработки выглядеть следующим образом:

import custom_logging 

def do_capture(data_dict_access): 
    """Process data""" 

    # Custom logging 
    LOGGER = custom_logging.create_logger("processor") 

    LOGGER.debug("Doing stuff...") 

Однако, независимо от того, что переменная каротаж окружения установлена, я до сих пор получать сообщения отладки журнала в консоль. Почему мой уровень ведения журналов не вступает в силу, конечно, вызовы setLevel() должны прекратить запись отладочных сообщений?

+0

Прежде всего: 'еще if' должен быть' elif' –

+0

@HaiVu Странно, я не получаю синтаксическую ошибку от этого. Изменено в любом случае, до сих пор нет разницы – CyberJacob

+0

Я разместил решение, но все еще пытаюсь выяснить, почему ваш код не работает. –

ответ

3

Вот легкий способ создать регистратор объекта:

import logging 
import os 

def create_logger(app_name): 
    """Create a logging interface""" 
    logging_level = os.getenv('logging', logging.INFO) 
    logging.basicConfig(
     level=logging_level, 
     format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') 
    logger = logging.getLogger(app_name) 
    return logger 

Обсуждение

  • Там нет необходимости конвертировать из «DEBUG» в logging.DEBUG, то logging модуль понимает эти строки ,
  • Используйте basicConfig, чтобы облегчить боль при настройке регистратора. Вам не нужно создавать обработчик, задавать формат, устанавливать уровень ... Это должно работать в большинстве случаев.

Update

Я узнал, почему ваш код не работает, кроме else if. Рассмотрите свою линию:

if logging in os.environ: 

На этой линии loggging без кавычек относится к пакету logging библиотеки. Чего вы хотите:

if 'logging' in os.environ: 
+0

Я не знал, что регистрация будет распознавать строки, это очень полезно. недостающие котировки будут причиной того, что вызвало проблему, и добавив, что они исправили ее. – CyberJacob

Смежные вопросы