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

时间:2017-10-31 12:43:51

标签: 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 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 个答案:

答案 0 :(得分:3)

将格式说明符用于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
>>> 

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

答案 1 :(得分:1)

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

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

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