2016-09-30 99 views
3

我有一个利用多处理来提高效率的python程序和一个为每个进程创建一个记录器的函数。该记录器功能如下:Python日志记录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 

讨论

  • 没有必要从“调试”logging.DEBUG转换时,logging模块了解到这些字符串。使用basicConfig可以减轻建立记录器的痛苦。您不需要创建处理程序,设置格式,设置级别,...这应该适用于大多数情况。

更新

我发现为什么你的代码不能正常工作,除了else if。考虑你行:

if logging in os.environ: 

在此行中loggging中没有报价是指logging库包。你想要的是:

if 'logging' in os.environ: 
+0

我不知道日志记录会识别字符串,这非常有用。缺少的引号将是导致问题的原因,并添加它们修复它。 – CyberJacob