如何获取当前日志级别的Python记录模块

问题描述:

我试图创建将无需外部包着色基本记录器,如何获取当前日志级别的Python记录模块

# 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" 
) 

是否有可能得到logging包当前日志级别?


例如,可以说我通过logger.INFO("test")我需要一种方法来获取INFO部分作为一个字符串,从那里,set_color_value("INFO")应该返回:

enter image description here

我决定做这个不同的方式,并通过添加颜色的条纹摹本身带数字:

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)) 

将输出:

enter image description here

是的,你可以检查记录器水平由

level = logger.level 
+0

不这只是表明当前记录器设置的级别至?我需要一种方法来获取从记录器传递的每个字符串的日志记录信息,例如,可以说我通过'logger.FATAL(“test”)'我需要那个'FATAL'部分作为字符串传递 – wahwahwah

+1

此答案回答这个问题问了什么。自从我到达这里寻找答案以来,您的问题需要改进。 –

+0

**同意**您的问题的内容与您的问题的标题@wahwahwah不一致。后者可能对*ers(包括我自己)更感兴趣。它*非常不正交,因为'logging' API定义了'setLevel()'和'getEffectiveLevel()'方法,但是没有*'getLevel()'方法,当它们可以简单地定义一个简单的'getLevel ):返回self.level'方法。 '' –