Cpt*_*rkt 20 python formatting logging
以下是日志记录教程中的日志记录示例:
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
Run Code Online (Sandbox Code Playgroud)
这种拖尾的锯齿状让我感到厌烦.
我真的希望能够像这样格式化:
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
Run Code Online (Sandbox Code Playgroud)
我为我的记录器尝试了以下操作,但它不起作用(缩写代码):
fmt = "{0:>8}"
formatter = logging.Formatter("%(asctime)s %(filename)s: " + fmt.format("%(levelname)s") + " %(message)s", "%Y/%m/%d %H:%M:%S")
Run Code Online (Sandbox Code Playgroud)
这样可以正常执行并始终打印级别名称,但它不实现宽度格式.
防爆.
logger.debug("testing debug message")
logger.info("some random info")
logger.critical("oh crap!")
Run Code Online (Sandbox Code Playgroud)
实际结果:
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!
Run Code Online (Sandbox Code Playgroud)
期望的结果:
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!
Run Code Online (Sandbox Code Playgroud)
在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")
Run Code Online (Sandbox Code Playgroud)
仍然导致:
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!
Run Code Online (Sandbox Code Playgroud)
也许我只是在做一些愚蠢的事情.
Amb*_*ber 28
可以通过在类型说明符前添加数字来指定字段宽度:
>>> "%(foo)8s" % {'foo': 'bar'}
' bar'
Run Code Online (Sandbox Code Playgroud)
您可以在传递给formatter的格式字符串中使用它.对于你的例子,那是:
"%(asctime)s %(filename)s: %(levelname)8s %(message)s"
Run Code Online (Sandbox Code Playgroud)
Mil*_*vis 14
日志记录(从 3.2 开始)提供了对括号字符串格式样式的改进支持。例如,您现在可以使用这种格式:
fomatter = logging.Formatter('{asctime} {name} {levelname:^8s} {message}', style='{')
Run Code Online (Sandbox Code Playgroud)
它产生中心对齐的日志级别。我不认为这对于 % 格式的字符串是可能的。
2021-10-19 14:27:05,799 __main__ DEBUG Debug message
2021-10-19 14:27:05,800 __main__ INFO Info message
2021-10-19 14:27:05,800 __main__ WARNING Warning message
2021-10-19 14:27:05,801 __main__ ERROR Error message
Run Code Online (Sandbox Code Playgroud)
和
'{asctime} {name} {levelname:<8s} {message}'
右对齐
2021-10-19 14:26:45,408 __main__ DEBUG Debug message
2021-10-19 14:26:45,409 __main__ INFO Info message
2021-10-19 14:26:45,410 __main__ WARNING Warning message
2021-10-19 14:26:45,410 __main__ ERROR Error message
Run Code Online (Sandbox Code Playgroud)
或者
'{asctime} {name} {levelname:>8s} {message}'
左对齐
2021-10-19 14:26:25,761 __main__ DEBUG Debug message
2021-10-19 14:26:25,761 __main__ INFO Info message
2021-10-19 14:26:25,762 __main__ WARNING Warning message
2021-10-19 14:26:25,762 __main__ ERROR Error message
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6259 次 |
| 最近记录: |