如何获取当前日志级别的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")
应该返回:
答
我决定做这个不同的方式,并通过添加颜色的条纹摹本身带数字:
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))
将输出:
答
是的,你可以检查记录器水平由
level = logger.level
不这只是表明当前记录器设置的级别至?我需要一种方法来获取从记录器传递的每个字符串的日志记录信息,例如,可以说我通过'logger.FATAL(“test”)'我需要那个'FATAL'部分作为字符串传递 – wahwahwah
此答案回答这个问题问了什么。自从我到达这里寻找答案以来,您的问题需要改进。 –
**同意**您的问题的内容与您的问题的标题@wahwahwah不一致。后者可能对*ers(包括我自己)更感兴趣。它*非常不正交,因为'logging' API定义了'setLevel()'和'getEffectiveLevel()'方法,但是没有*'getLevel()'方法,当它们可以简单地定义一个简单的'getLevel ):返回self.level'方法。 '' –