Python:截断的日志级别名称(字符串格式化)自定义

10

我正在使用Python的logging模块,我希望对我的日志信息进行简单修改。以下是格式化程序和结果:

console_err_format = logging.Formatter(
    str("%(asctime)s - " + "%(levelname)s" +" - %(message)s"),
    "%H:%M:%S")

12:35:33 - INFO - Assessing reads and library type
12:35:33 - DEBUG - Checking reads...
12:35:33 - WARNING - Error while checking reads...

我希望只显示日志级别的第一个字符:
12:35:33 - I - Assessing reads and library type
12:35:33 - D - Checking reads...
12:35:33 - W - Error while checking reads...

有人知道如何做到这一点吗?我已经尝试了以下方法,但都不起作用:

# attempt 1
console_err_format = logging.Formatter(
    str("%(asctime)s - " +"{0}".format("%(levelname)s"[:1]) +" - %(message)s"), "%H:%M:%S")
# attempt 2
console_err_format = logging.Formatter(
    str("%(asctime)s - " +"%(levelname)s"[:1] +" - %(message)s"), "%H:%M:%S")

如果有任何建议,将不胜感激!如果有人成功地整合了其中一个颜色日志模块,那就更好了!

2个回答

15

使用格式说明符进行1个字符的精度,就像以下示例一样:

>>> import logging
>>> logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname).1s %(message)s')
>>> logging.debug('Message should be as required')
2017-11-01 00:47:31,409 D Message should be as required
>>> logging.warning('Warning message should be as required')
2017-11-01 00:47:50,702 W Warning message should be as required
>>> 

请注意%(levelname)格式说明符中s前面的.1,它将该值输出限制为一个(第一个)字符。


6

我不确定如何使用格式化程序完成此操作,但您可以将内置的级别名称字符串替换为自己的字符串。例如:

logging.addLevelName(logging.WARNING, 'W')

将与“WARNING”级别相关联的字符串替换为单个字符“W”。对所有级别重复执行上述操作将产生期望的效果。


1
这个很棒(而且添加颜色也很容易,顺便说一下!)。如果没有其他人回应如何操作格式化程序本身,我会说这是最好的选择。 - NWaters
这是设置格式的一个很好的补充。例如,通过格式化程序,可以将级别截断为3个字符,并将级别命名为DBGWRNFTL,我认为这样更容易阅读。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接