LogShaper

Parse stack traces into structured JSON

No network access · nothing leaves your browser Support LogShaper
Sanitization Rules
Quick samples:
Ctrl/⌘ + Enter to parse
No data processed yet.
/* Click "Parse & Normalize Schema" to process raw logs */

Parse stack traces, right in your browser

Multi-line stack traces break most line-based log tools: every frame becomes its own entry. LogShaper groups a trace with the log line it belongs to, so each error becomes one JSON object with its level, timestamp, message, the full stack as an array, and the exception that caused it.

How to use it

  1. Paste your logs into the box above. An example is already loaded so you can see the result.
  2. Choose what to redact: IP addresses, keys and tokens, and emails are all on by default.
  3. Click Parse & Normalize Schema, then copy or download the JSON, the JSON Schema, or a CSV from the Data Grid.

What you get

Example

Input
[ERROR] 2026-11-11 10:20:00 - Failed to process payment for user_id=4021 ([email protected]) from IP 192.168.0.100
java.lang.IllegalStateException: Card processor unavailable
    at com.shop.payments.Gateway.charge(Gateway.java:88)
    at com.shop.payments.CheckoutService.pay(CheckoutService.java:41)
Caused by: java.net.SocketTimeoutException: Read timed out
    ... 12 more
[WARN] 2026-11-11 10:20:05 - Retry attempt 1 with bearer_token=bearer_xyz_771 password=hunter2
Output
[
  {
    "timestamp": "2026-11-11T10:20:00",
    "level": "error",
    "message": "Failed to process payment for user_id=4021 ([EMAIL_REDACTED]) from IP [IP_REDACTED]",
    "user_id": 4021,
    "stack": [
      "java.lang.IllegalStateException: Card processor unavailable",
      "    at com.shop.payments.Gateway.charge(Gateway.java:88)",
      "    at com.shop.payments.CheckoutService.pay(CheckoutService.java:41)",
      "Caused by: java.net.SocketTimeoutException: Read timed out",
      "    ... 12 more"
    ],
    "exception": "java.lang.IllegalStateException: Card processor unavailable"
  },
  {
    "timestamp": "2026-11-11T10:20:05",
    "level": "warn",
    "message": "Retry attempt 1 with bearer_token=[SECRET_REDACTED] password=[SECRET_REDACTED]",
    "bearer_token": "[SECRET_REDACTED]",
    "password": "[SECRET_REDACTED]"
  }
]

Questions

Which languages are supported?

Java (including Caused by: chains and ... N more), Python tracebacks, and Node.js / JavaScript traces with indented at frames.

Are secrets inside traces redacted?

Yes. The same IP, email and secret rules apply to the message and to every stack frame.

Can I filter to just the errors?

Type error in the filter box. It searches across every field of each entry.

Is my data uploaded anywhere?

No. Parsing, redaction and schema generation all run in your browser tab. The page's security policy blocks every network request, so pasted logs can't be sent anywhere, and nothing is saved when you close the tab.

More LogShaper tools

Nginx log to JSONAccess logs to structured JSON fieldsRedact secrets from logsScrub API keys, tokens, emails and IPsJSON to JSON SchemaInfer a schema from sample JSONSyslog to JSONLinux system logs to structured recordslogfmt to JSONkey=value logs to typed JSON