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

Python:截断日志级别名称(字符串格式)自定义,python,logging,string-formatting,Python,Logging,String Formatting,我正在使用pythons日志模块,我想对我的日志消息做一个简单的更改。以下是格式化程序的外观以及结果: 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

我正在使用pythons日志模块,我想对我的日志消息做一个简单的更改。以下是格式化程序的外观以及结果:

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

任何提示都将不胜感激!如果有人知道如何集成其中一个彩色日志模块,则可获得额外积分

我不知道如何使用格式化程序,但您可以用自己的字符串替换内置的级别名称字符串。例如:

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

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

使用格式说明符获得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)
说明符中
.1
前面的
s
,它将该值的输出限制为一个(第一个)字符。

这非常有效(而且很容易添加颜色,但方法是这样的!)。如果没有其他人以操纵格式化程序本身的方式响应,我会说这是最好的选择