Python记录日志级别的等长字符串
Python Logging Equal Length String of Log Level
在python中使用logging
模块时,显示的日志级别使它们的长度都不同。使用格式字符串 "[%(levelname)s] - %(message)s"
,日志文件如下所示:
[DEBUG] - Message
[INFO] - Message
[WARNING] - Message
[ERROR] - Message
[CRITICAL] - Message
但是,如果日志级别占用相同数量的space,我真的很喜欢它。有没有办法让输出看起来像这样:
[ DBUG ] - Message
[ INFO ] - Message
[ WARN ] - Message
[ EROR ] - Message
[CRITICAL] - Message
是否需要缩短级别名称,或者只是在名称的两侧添加填充对我来说并不重要。只是一些让所有东西都在关卡名称之后排列的方法就是我所追求的。
作为一个从未编写过代码的开发人员 python 我设法做到了这一点。一切如您所愿
def labelize(label, max_len, message):
fixed = "["
len_to_cut = len(label) - 1 if len(label) % 2 == 1 else len(label)
for i in range(int((max_len - len_to_cut) / 2)):
fixed += " "
fixed += (label[0:len_to_cut])
for i in range(int((max_len - len_to_cut) / 2)):
fixed += " "
return fixed + "] " + message
print(labelize("DEBUG", 10, "Message"))
print(labelize("INFO", 10, "Message"))
print(labelize("WARNING", 10, "Message"))
print(labelize("ERROR", 10, "Message"))
print(labelize("CRITICAL", 10, "Message"))
[ DEBU ] Message
[ INFO ] Message
[ WARNIN ] Message
[ ERRO ] Message
[ CRITICAL ] Message
如果事先知道最长的日志级别名称,对于
例如,如果您只打算使用标准日志
级别,一个简单的解决方案可能是设置格式化程序,
如下面的第一个代码块(输出与灵活的相同
解决方案):
# Set logging format and lowest logging level
logging.basicConfig(format='[{levelname:^8s}] - {message:s}',
style='{',
level=logging.DEBUG)
for i,nm in logging._levelToName.items():
logging.log(i, f"This is a {nm.lower().strip()} level message")
一个灵活的解决方案,其中记录级别的名称
事先不知道,就是重命名数字日志
logging
模块的级别。这个解决方案是
在下面的代码中演示。
代码设置了一个基本的格式化程序来复制请求的
输出消息,并将日志记录级别设置为最低
等级.
确定最长日志记录级别名称后,设置
所有日志记录级别名称为其原始名称,居中,
有额外的填充。
# Set logging format and lowest logging level
logging.basicConfig(format='[%(levelname)s] - %(message)s',
level=logging.DEBUG)
# Determine longest loggging name
longest = max(logging._levelToName.items(), key=lambda x: len(x[1]))
maxLen = len(longest[1].strip())
# Reformat logging level names
for i,nm in logging._levelToName.items():
# See
logging.addLevelName(i, "{0:^{width}}".format(nm, width=maxLen))
logging.log(i, f"This is a {nm.lower().strip()} level message")
输出:
[CRITICAL] - This is a critical level message
[ ERROR ] - This is a error level message
[WARNING ] - This is a warning level message
[ INFO ] - This is a info level message
[ DEBUG ] - This is a debug level message
在python中使用logging
模块时,显示的日志级别使它们的长度都不同。使用格式字符串 "[%(levelname)s] - %(message)s"
,日志文件如下所示:
[DEBUG] - Message
[INFO] - Message
[WARNING] - Message
[ERROR] - Message
[CRITICAL] - Message
但是,如果日志级别占用相同数量的space,我真的很喜欢它。有没有办法让输出看起来像这样:
[ DBUG ] - Message
[ INFO ] - Message
[ WARN ] - Message
[ EROR ] - Message
[CRITICAL] - Message
是否需要缩短级别名称,或者只是在名称的两侧添加填充对我来说并不重要。只是一些让所有东西都在关卡名称之后排列的方法就是我所追求的。
作为一个从未编写过代码的开发人员 python 我设法做到了这一点。一切如您所愿
def labelize(label, max_len, message):
fixed = "["
len_to_cut = len(label) - 1 if len(label) % 2 == 1 else len(label)
for i in range(int((max_len - len_to_cut) / 2)):
fixed += " "
fixed += (label[0:len_to_cut])
for i in range(int((max_len - len_to_cut) / 2)):
fixed += " "
return fixed + "] " + message
print(labelize("DEBUG", 10, "Message"))
print(labelize("INFO", 10, "Message"))
print(labelize("WARNING", 10, "Message"))
print(labelize("ERROR", 10, "Message"))
print(labelize("CRITICAL", 10, "Message"))
[ DEBU ] Message
[ INFO ] Message
[ WARNIN ] Message
[ ERRO ] Message
[ CRITICAL ] Message
如果事先知道最长的日志级别名称,对于 例如,如果您只打算使用标准日志 级别,一个简单的解决方案可能是设置格式化程序, 如下面的第一个代码块(输出与灵活的相同 解决方案):
# Set logging format and lowest logging level
logging.basicConfig(format='[{levelname:^8s}] - {message:s}',
style='{',
level=logging.DEBUG)
for i,nm in logging._levelToName.items():
logging.log(i, f"This is a {nm.lower().strip()} level message")
一个灵活的解决方案,其中记录级别的名称
事先不知道,就是重命名数字日志
logging
模块的级别。这个解决方案是
在下面的代码中演示。
代码设置了一个基本的格式化程序来复制请求的 输出消息,并将日志记录级别设置为最低 等级.
确定最长日志记录级别名称后,设置 所有日志记录级别名称为其原始名称,居中, 有额外的填充。
# Set logging format and lowest logging level
logging.basicConfig(format='[%(levelname)s] - %(message)s',
level=logging.DEBUG)
# Determine longest loggging name
longest = max(logging._levelToName.items(), key=lambda x: len(x[1]))
maxLen = len(longest[1].strip())
# Reformat logging level names
for i,nm in logging._levelToName.items():
# See
logging.addLevelName(i, "{0:^{width}}".format(nm, width=maxLen))
logging.log(i, f"This is a {nm.lower().strip()} level message")
输出:
[CRITICAL] - This is a critical level message
[ ERROR ] - This is a error level message
[WARNING ] - This is a warning level message
[ INFO ] - This is a info level message
[ DEBUG ] - This is a debug level message