如何在python日志模块中获取当前日志级别

如何在python日志模块中获取当前日志级别,python,python-2.7,logging,Python,Python 2.7,Logging,我正在尝试创建一个基本的记录器,它将在没有外部包的情况下着色 # these have to be the first functions so I can use it in the logger settings def create_log_name(log_path="{}/log", filename="zeus-log-{}.log"): if not os.path.exists(log_path.format(os.getcwd())): os.mkdir

我正在尝试创建一个基本的记录器,它将在没有外部包的情况下着色

# these have to be the first functions so I can use it in the logger settings
def create_log_name(log_path="{}/log", filename="zeus-log-{}.log"):
    if not os.path.exists(log_path.format(os.getcwd())):
        os.mkdir(log_path.format(os.getcwd()))
    find_file_amount = len(os.listdir(log_path.format(os.getcwd())))
    full_log_path = "{}/{}".format(log_path.format(os.getcwd()), filename.format(find_file_amount + 1))
    return full_log_path


def set_color_value(levelname):
    log_set = {
        "INFO": "\033[92m{}\033[0m",
        "WARNING": "\033[93m{}\033[0m",
        "DEBUG": "\033[94m{}\033[0m",
        "ERROR": "\033[91m{}\033[0m",
        "CRITICAL": "\033[91m{}\033[0m"
    }
    return log_set[levelname].format(levelname)

logger = logging.getLogger("zeus-log")
logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler(
    filename=create_log_name(), mode="a+"
)
file_handler.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
file_format = logging.Formatter(
    '%(asctime)s;%(name)s;%(levelname)s;%(message)s'
)
console_format = logging.Formatter(
    "[%(asctime)s {}] %(message)s".format(set_color_value()), "%H:%M:%S"
)
file_handler.setFormatter(file_format)
console_handler.setFormatter(console_format)
logger.addHandler(console_handler)
logger.addHandler(file_handler)
因此,从现在开始,我需要做的就是获取将在
logging.Formatter
中设置的当前日志级别,并将其发送到我的小函数:

console_format = logging.Formatter(
    "[%(asctime)s {}] %(message)s".format(set_color_value()), "%H:%M:%S"
)
是否可以从日志记录包获取当前日志级别


例如,假设我通过了
logger.INFO(“test”)
我需要一种方法将
INFO
部分作为字符串输入,从那里,
set\u color\u value(“INFO”)
应该返回:


是的,您可以通过

level = logger.level

我决定用另一种方式,通过字符串本身添加颜色,并使用级别编号:

def set_color(org_string, level=None):
    color_levels = {
        10: "\033[36m{}\033[0m",       # DEBUG
        20: "\033[32m{}\033[0m",       # INFO
        30: "\033[33m{}\033[0m",       # WARNING
        40: "\033[31m{}\033[0m",       # ERROR
        50: "\033[7;31;31m{}\033[0m"   # FATAL/CRITICAL/EXCEPTION
    }
    if level is None:
        return color_levels[20].format(org_string)
    else:
        return color_levels[int(level)].format(org_string)
例如:

logger.info(set_color("test"))
logger.debug(set_color("test", level=10))
logger.warning(set_color("test", level=30))
logger.error(set_color("test", level=40))
logger.fatal(set_color("test", level=50))
将输出:


如果您正在使用根记录器,例如,因为您调用了
logging.basicConfig()
,那么您可以使用

import logging
logging.root.level
比如说

if logging.DEBUG >= logging.root.level:
    # Do something

在您的logger实例中,您可以这样检查它,正如@Milán Vásárhelyi所说:

myLogger.level

这将以int形式返回级别。如果希望以字符串形式显示名称,可以执行以下操作:

logging.getLevelName(myLogger.level)
logger.level
中所述,通常是错误的

您需要
logger.getEffectiveLevel()

引用消息来源:


“这里有一个要点:不要依赖.level。如果你没有明确地为你的logger对象设置一个级别,并且你出于某种原因依赖.level,那么你的日志设置的行为可能会与你预期的不同。”

这难道不只是显示当前logger设置的级别吗?我需要一种从记录器传递的每个字符串中获取日志信息的方法,例如,假设我通过了
logger.FATAL(“test”)
我需要将
FATAL
部分作为字符串传递。此答案回答了问题的答案。你的问题需要改进,因为我来到这里寻找这个答案。同意。你问题的内容与你问题的标题不一致。后者可能对StackOverflowers(包括我自己)更感兴趣。奇怪的是,
logging
API定义了
setLevel()
getEffectiveLevel()
方法,而没有
getLevel()
方法,而它们本可以简单地定义一个平凡的
getLevel(self):返回self.level
方法
无论我是将其设置为
INFO
还是
DEBUG
例如,像这样
logging.basicConfig(stream=sys.stdout,level='DEBUG')
logger.level总是显示0,没有帮助@“奇怪的非正交”是什么意思?在这种情况下,我不是sure@CecilCurry赞同你的意见。
logging
的文档页面没有提到
level
,可以通过logger对象直接访问。它只提到
getEffectiveLevel
作为获取当前日志级别的方法。没有其他办法达到同样的目的。