Python 日志记录 setLevel() 没有生效

标签 python logging python-multiprocessing

我有一个 python 程序,它利用多处理来提高效率,以及一个为每个进程创建记录器的函数。记录器函数如下所示:

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() 的调用肯定应该停止记录调试消息?

最佳答案

这是创建记录器对象的简单方法:

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.DEBUGlogging 模块可以理解这些字符串。
  • 使用basicConfig 来减轻设置记录器的痛苦。您不需要创建处理程序、设置格式、设置级别……这应该适用于大多数情况。

更新

除了 else if 之外,我发现了为什么您的代码不起作用。考虑你的行:

if logging in os.environ:

这一行不带引号的logging是指logging库包。你想要的是:

if 'logging' in os.environ:

关于Python 日志记录 setLevel() 没有生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39794194/

相关文章:

python - 线程 "Driver"org.apache.spark.SparkUserAppException : User application exited with 1 中出现异常

.net - 在 .net 应用程序中运行 XBMC 插件

python - Airflow + python 日志记录模块不写入日志文件

python - 如何在新的 Python 进程中设置环境变量

python 多处理。长时间执行后池卡住了

python - 将一系列整数映射到单个整数

python - 在 Pandas 列中,如何找到特定值出现的最大连续行数?

linux - 有什么有效的方法可以轻松获取Unix下Go程序的panic log吗?

logging - 将 screen (程序)输出保存到文件

Python 多处理 - 何时共享引用的对象?什么时候复制的?