如何扩展Python日志行,消息被截断,中间有椭圆



我有从Python的日志记录模块生成的日志文件,该模块在行中间使用省略号进行截断,大约为159个字符,如果算上换行,则为160个字符。

一开始,我以为是VSCode在做截断。文件已加载到记事本中,行的宽度相同。这些行很可能被Python的日志模块截断了。

日志模块设置:

import logging as log
from logging.handlers import RotatingFileHandler
log.basicConfig(
handlers=[RotatingFileHandler('./logs/kucoin_bot.log', maxBytes=100000, backupCount=100, encoding='utf-8')],
level=log.DEBUG,
format="[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s",
datefmt='%Y-%m-%dT%H:%M:%S')

在VSCode中安装了Prettier扩展。有哪些选项可以将此行扩展到其全宽以显示日志的所有详细信息?

[2022-10-22T01:47:04] DEBUG [websockets.client.read_frame:1152] < TEXT '{"type":"message","topic":"/spotMarket/level2De...estamp":1666428417709}}' [394 bytes]

VSCode中的以下设置没有产生影响:

"editor.stopRenderingLineAfter":-1

更新:

我想知道Python的日志记录是否正在重新格式化字符串。Python的websockets中生成截断行的函数位于:

def write_frame_sync(self, fin: bool, opcode: int, data: bytes) -> None:
frame = Frame(fin, Opcode(opcode), data)
if self.debug:
self.logger.debug("> %s", frame)
print(frame) # <<<
frame.write(
self.transport.write,
mask=self.is_client,
extensions=self.extensions,
)

print((语句用于打印出"框架"(用<<表示(。

TEXT '{"type": "subscribe", "topic": "/spotMarket/lev...privateChannel": false}' [1063 bytes]

结果看起来类似地被截断了!

这些行很可能被Python的日志模块截断了。

这不是开箱即用的logging功能的一部分;如果它不是编辑器的工件,那么很可能配置了具有换行行为的Formatter

根据我在原始帖子中发布的更新内容,我研究了Frame对象的代码。文件位于:

C:UsersThomasAppDataLocalProgramsPythonPython310Libsite-packageswebsocketsframes.py

有一个函数可以返回字符串,使框架对象可读:

def __str__(self) -> str:
"""
Return a human-readable representation of a frame.
"""

在函数的末尾,找到了截断数据的代码:

if len(data) > 75:
data = data[:48] + "..." + data[-24:] <---<<< here
metadata = ", ".join(filter(None, [coding, length, non_final]))
return f"{self.opcode.name} {data} [{metadata}]"

总之,帧对象在转换为字符串时会被截断,并且它太大。Python的日志记录和VSCode并不是进行截断的。

相关内容

  • 没有找到相关文章

最新更新