You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Logger层面限制日志字符串长度并替换超长内容?

Fixing Python Logger Terminal Output Failure from Overlong Base64 Strings

Absolutely! You don't need to modify the internal function logic at all—we can resolve this directly by customizing the Python logging layer to truncate or replace overlong log content. Here's a step-by-step solution:

Key Approach: Custom Log Formatter

The core idea is to create a custom logging.Formatter that checks the length of the final log message. If it exceeds your specified maximum length, it truncates the content and appends a custom placeholder string. This works seamlessly with existing logger calls (like your logger.info(f'result: {export}') line) since we're intercepting the message formatting process.

Step 1: Define the Truncation Formatter

Create a formatter class that inherits from Python's built-in logging.Formatter and overrides the format method to add truncation logic:

import logging

class TruncateFormatter(logging.Formatter):
    def __init__(self, max_length=1000, truncate_msg="[TRUNCATED - Content exceeds max length]", *args, **kwargs):
        super().__init__(*args, **kwargs)
        # Set your desired maximum log length
        self.max_length = max_length
        # Set the placeholder for truncated content
        self.truncate_msg = truncate_msg

    def format(self, record):
        # Get the original formatted message first
        original_message = super().format(record)
        
        # Check if the message exceeds the max length
        if len(original_message) > self.max_length:
            # Truncate and append the placeholder
            return original_message[:self.max_length] + self.truncate_msg
        # Return the original message if it's within limits
        return original_message

Step 2: Apply the Formatter to Your Logger

Now you need to attach this custom formatter to the handlers of your project's existing logger. Here's how to do it for both new and pre-existing loggers:

For a New Logger Setup

If you're configuring a logger from scratch:

# Initialize your logger
logger = logging.getLogger("your_project_logger")
logger.setLevel(logging.INFO)

# Clear any existing handlers to avoid duplicate output
for handler in logger.handlers[:]:
    logger.removeHandler(handler)

# Create a console handler (for terminal output)
console_handler = logging.StreamHandler()
# Attach our truncation formatter (adjust max_length as needed)
formatter = TruncateFormatter(max_length=500, truncate_msg=" [TRUNCATED LONG BASE64 CONTENT]")
console_handler.setFormatter(formatter)

# Add the handler to the logger
logger.addHandler(console_handler)

For an Existing Project Logger

If your project already has a configured logger (e.g., a global logger), just update its handlers:

# Get the existing logger from your project
existing_logger = logging.getLogger("existing_project_logger")

# Iterate over its handlers and apply the formatter to terminal handlers
for handler in existing_logger.handlers:
    # Target only StreamHandler (which outputs to terminal)
    if isinstance(handler, logging.StreamHandler):
        handler.setFormatter(TruncateFormatter(max_length=500))

Step 3: Test It Out

Run your code with the overlong Base64 string—you'll see that terminal output stays intact, and any content exceeding your max_length gets truncated with your custom placeholder.

Bonus: Targeted Truncation (Optional)

If you only want to truncate messages that contain specific patterns (like the "result:" prefix in your example), you can modify the format method to check for that first:

def format(self, record):
    original_message = super().format(record)
    # Only truncate messages starting with "result:"
    if original_message.startswith("result:") and len(original_message) > self.max_length:
        return original_message[:self.max_length] + self.truncate_msg
    return original_message

This way, regular log messages remain unaffected—only the problematic Base64-containing logs get truncated.

内容的提问来源于stack exchange,提问作者pythoneer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 02:49:10