以下是日志记录教程中的日志记录示例:
2005-03-19 15:38:55,977 - simpleExample - DEBUG - debug message
2005-03-19 15:38:55,979 - simpleExample - INFO - info message
2005-03-19 15:38:56,054 - simpleExample - WARNING - warn message
2005-03-19 15:38:56,055 - simpleExample - ERROR - error message
2005-03-19 15:38:56,130 - simpleExample - CRITICAL - critical message
这种拖尾的锯齿状让我感到厌烦。
我真的希望能够像这样格式化:
2005-03-19 15:38:55,977 - simpleExample - DEBUG - debug message
2005-03-19 15:38:55,979 - simpleExample - INFO - info message
2005-03-19 15:38:56,054 - simpleExample - WARNING - warn message
2005-03-19 15:38:56,055 - simpleExample - ERROR - error message
2005-03-19 15:38:56,130 - simpleExample - CRITICAL - critical message
我为我的记录器尝试了以下操作,但它不起作用(缩写代码):
fmt = "{0:>8}"
formatter = logging.Formatter("%(asctime)s %(filename)s: " + fmt.format("%(levelname)s") + " %(message)s", "%Y/%m/%d %H:%M:%S")
执行正常并一如既往地打印关卡名称,但它没有实现宽度格式。
实施例
logger.debug("testing debug message")
logger.info("some random info")
logger.critical("oh crap!")
实际结果:
2013/12/16 13:43:10 logtester: DEBUG testing debug message
2013/12/16 13:43:10 logtester: INFO some random info
2013/12/16 13:43:10 logtester: CRITICAL oh crap!
期望的结果:
2013/12/16 13:43:10 logtester: DEBUG testing debug message
2013/12/16 13:43:10 logtester: INFO some random info
2013/12/16 13:43:10 logtester: CRITICAL oh crap!
在logging.Formatter()中实现字段固定宽度的任何提示?
使用Python 2.6.9。
编辑:使用其他方法进行第二次尝试:
formatter = logging.Formatter("%(asctime)s %(filename)s: " + "%(foo)5s" % {"foo" : "(%(levelname)s)"} + " %(message)s", "%Y/%m/%d %H:%M:%S")
仍然导致:
2013/12/16 13:43:10 logtester: DEBUG testing debug message
2013/12/16 13:43:10 logtester: INFO some random info
2013/12/16 13:43:10 logtester: CRITICAL oh crap!
也许我只是做了一些蠢事。
答案 0 :(得分:26)
可以通过在类型说明符前添加数字来指定字段宽度:
>>> "%(foo)8s" % {'foo': 'bar'}
' bar'
您可以在传递给格式化程序的格式字符串中使用它。对于你的例子,那就是:
"%(asctime)s %(filename)s: %(levelname)8s %(message)s"