skip to Main Content

I have log files generated from Python’s logging module that truncates with ellipses in the middle of lines, at around 159 characters or 160 if you count newline.

At first, I thought it was VSCode doing the truncating. The file was loaded into Notepad and the lines were the same width. It’s likely the lines were truncated with Python’s logging module.

Settings for logging module:

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

Prettier extension is installed in VSCode. What are the options to expand this line to its full width to show all the details of the log?

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

The following setting in VSCode didn’t make a difference:

"editor.stopRenderingLineAfter" : -1

Update:

I wanted to find out if Python’s logging was reformating the string. The function in Python’s websockets that generated the truncated line was located:

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

A print() statement was used to print out the ‘frame’ (notated by <<<).

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

The result looked similarly truncated!

2

Answers


  1. Chosen as BEST ANSWER

    Based on the updated I posted in the original post, I looked into the code of what the Frame object was. The file was found at:

    C:UsersThomasAppDataLocalProgramsPythonPython310Libsite-packageswebsocketsframes.py
    

    There is a function to return a string to make the frame object human readable:

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

    Toward the end of the function, the code to truncate the data was found:

    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}]"
    

    In summary, the frame object gets truncated when translated to a string and it's too large. Python's logging and VSCode weren't the ones doing the truncating.


  2. It’s likely the lines were truncated with Python’s logging module.

    That’s not part of out-of-the-box logging functionality; if it’s not an artifact of the editor, it’s likely a Formatter was configured which has the line-shortening behaviour.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search