{
  "title": "Error log grouper",
  "human_url": "https://happytails.ai/en/developer-tools/error-log-grouper/",
  "agent_url": "https://happytails.ai/agents/en/developer-tools/error-log-grouper/",
  "language": "en",
  "markdown_url": "https://happytails.ai/en/developer-tools/error-log-grouper.md",
  "content": "Error log grouper\nPaste error logs or a JSON error export and group repeated errors by their stack trace fingerprint. Each group shows its count, first and last time seen and one full example.\nHow to use Error log grouper\nPaste error logs or a JSON, NDJSON or CSV error export.\nChoose how many stack frames make up a fingerprint.\nRun the grouping and review the largest groups first.\nDownload the JSON report or the CSV of groups.\nHow can we improve this tool?\nReport a problem or share an idea.\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\nUseful next steps\nRegex tester\nUnix timestamp converter\nJSONL validator\nStack formats\nFrames from V8 (Chrome and Node.js), Firefox and Safari, Java, Python and .NET are recognised. A text log is split into errors at each line that is not a stack frame. Python tracebacks are read with their final exception line.\nHow fingerprints work\nA fingerprint combines the error type with the top stack frames. File paths lose their origin, query string and bundle hashes such as app.3f2a1b9c.js, so builds of the same code group together. Line numbers and the message are left out unless you include them. Errors with no frames use the normalised message, where numbers, quoted text and ids are replaced by placeholders.\nMerging near matches\nA similarity below 1 merges groups whose frames and message words have at least that Jaccard similarity. This can merge errors that are only related, so start at 1 and lower it only when groups look split.",
  "content_format": "text/plain",
  "visibility": "public",
  "links": [
    {
      "name": "Regex tester",
      "url": "https://happytails.ai/en/developer-tools/regex-tester/"
    },
    {
      "name": "Unix timestamp converter",
      "url": "https://happytails.ai/en/developer-tools/unix-timestamp-converter/"
    },
    {
      "name": "JSONL validator",
      "url": "https://happytails.ai/en/data-tools/jsonl-validator/"
    }
  ],
  "tool": {
    "id": "error-log-grouper",
    "category": "developer-tools",
    "built": true,
    "requirements": "Up to 2,000,000 characters of logs or exports and 1,000,000 errors. Processing runs locally in a background worker in your browser. Downloads: a JSON report and a CSV of groups.",
    "implementation": {
      "fields": [
        {
          "key": "format",
          "label": "Log format",
          "value": "auto",
          "type": "select",
          "values": [
            "auto",
            "text",
            "json",
            "ndjson",
            "csv"
          ],
          "labels": {
            "auto": "Detect automatically",
            "text": "Plain text",
            "json": "JSON",
            "ndjson": "Newline-delimited JSON",
            "csv": "CSV"
          }
        },
        {
          "key": "frames",
          "label": "Stack frames in the fingerprint",
          "value": "5",
          "type": "number",
          "min": 1,
          "max": 50,
          "step": 1
        },
        {
          "key": "similarity",
          "label": "Similarity needed to merge groups",
          "value": "1",
          "type": "number",
          "min": 0.5,
          "max": 1,
          "step": "any",
          "help": "1 groups identical fingerprints only. Lower values also merge near matches."
        },
        {
          "key": "includeMessage",
          "label": "Include the normalised message in the fingerprint",
          "value": false,
          "type": "checkbox"
        },
        {
          "key": "includeLineNumbers",
          "label": "Include line numbers in the fingerprint",
          "value": false,
          "type": "checkbox"
        },
        {
          "key": "messageField",
          "label": "Message field for JSON or CSV",
          "value": "message",
          "type": "text",
          "maxLength": 200
        },
        {
          "key": "stackField",
          "label": "Stack field for JSON or CSV",
          "value": "stack",
          "type": "text",
          "maxLength": 200
        },
        {
          "key": "timeField",
          "label": "Time field for JSON or CSV",
          "value": "timestamp",
          "type": "text",
          "maxLength": 200
        },
        {
          "key": "naiveTimestamps",
          "label": "Times without a zone",
          "value": "reject",
          "type": "select",
          "values": [
            "reject",
            "utc"
          ],
          "labels": {
            "reject": "Reject missing time zones",
            "utc": "Interpret as UTC"
          }
        }
      ],
      "registrationFamily": "report-ingest-analysis-reference",
      "inputMaxLength": 2000000,
      "inputErrorCode": "REPORT_INGEST_ANALYSIS_REFERENCE_TOO_LONG",
      "note": "Runs in your browser in a background worker. Groups up to 2,000,000 characters of logs or JSON error exports.",
      "experience": {
        "automatic": false,
        "single": false,
        "inputMaxLength": 2000000,
        "inputMode": "text",
        "label": "Error logs or JSON error export",
        "placeholder": "TypeError: Cannot read properties of undefined\n    at render (app.js:10:5)",
        "help": "Paste server or browser logs with stack traces, or an export from your error tracker. Up to 2,000,000 characters. Review the settings before running.",
        "action": null
      },
      "mode": "explicit",
      "interactive": false
    },
    "execution": "Browser interface",
    "api": null,
    "browser_agent": {
      "supported": true,
      "name": "run_current_tool",
      "discovery": "WebMCP on the human page in a supporting browser",
      "verification": "See audit/API-AUDIT.md; availability is not verification"
    }
  },
  "markdown": "# Error log grouper\n\n- Human page: https://happytails.ai/en/developer-tools/error-log-grouper/\n- Markdown: https://happytails.ai/en/developer-tools/error-log-grouper.md\n- Structured JSON: https://happytails.ai/agents/en/developer-tools/error-log-grouper/index.json\n- Visibility: public\n\n## Tool capabilities\n\n| Property | Value |\n| --- | --- |\n| Tool ID | `error-log-grouper` |\n| Category | developer-tools |\n| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |\n| Browser execution | Use the visible action or interactive controls. |\n| Browser processing | Browser; see tool notes for network behavior. |\n| HTTP API | Not callable through HTTP. |\n| Browser-agent interface | run_current_tool |\n\n### Implementation notes\n\nRuns in your browser in a background worker. Groups up to 2,000,000 characters of logs or JSON error exports.\n\n### Inputs and settings\n\nText input: Error logs or JSON error export.\n\nExample or placeholder shown in the interface (not a validated fixture):\n\n```text\nTypeError: Cannot read properties of undefined\n    at render (app.js:10:5)\n```\n\nPaste server or browser logs with stack traces, or an export from your error tracker. Up to 2,000,000 characters. Review the settings before running.\n\n| Setting | Meaning | Control type | Default | Constraints |\n| --- | --- | --- | --- | --- |\n| `format` | Log format | select | \"auto\" | Allowed: auto, text, json, ndjson, csv |\n| `frames` | Stack frames in the fingerprint | number | \"5\" | min=1 max=50 step=1 |\n| `similarity` | Similarity needed to merge groups | number | \"1\" | min=0.5 max=1 step=any |\n| `includeMessage` | Include the normalised message in the fingerprint | checkbox | false |  |\n| `includeLineNumbers` | Include line numbers in the fingerprint | checkbox | false |  |\n| `messageField` | Message field for JSON or CSV | text | \"message\" |  |\n| `stackField` | Stack field for JSON or CSV | text | \"stack\" |  |\n| `timeField` | Time field for JSON or CSV | text | \"timestamp\" |  |\n| `naiveTimestamps` | Times without a zone | select | \"reject\" | Allowed: reject, utc |\n\n### Browser-agent workflow\n\n1. Open the human page in a browser that supports WebMCP.\n2. Discover the interface exposed by that page; use its actual schema.\n3. Select files on the page first when the tool requires files.\n4. Call `run_current_tool` with valid input and settings.\n5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.\n\nCalls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.\n\n### Planning specification\n\nUp to 2,000,000 characters of logs or exports and 1,000,000 errors. Processing runs locally in a background worker in your browser. Downloads: a JSON report and a CSV of groups.\n\nThis describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.\n\n### Complete machine-readable capability record\n\n```json\n{\n  \"id\": \"error-log-grouper\",\n  \"category\": \"developer-tools\",\n  \"built\": true,\n  \"requirements\": \"Up to 2,000,000 characters of logs or exports and 1,000,000 errors. Processing runs locally in a background worker in your browser. Downloads: a JSON report and a CSV of groups.\",\n  \"implementation\": {\n    \"fields\": [\n      {\n        \"key\": \"format\",\n        \"label\": \"Log format\",\n        \"value\": \"auto\",\n        \"type\": \"select\",\n        \"values\": [\n          \"auto\",\n          \"text\",\n          \"json\",\n          \"ndjson\",\n          \"csv\"\n        ],\n        \"labels\": {\n          \"auto\": \"Detect automatically\",\n          \"text\": \"Plain text\",\n          \"json\": \"JSON\",\n          \"ndjson\": \"Newline-delimited JSON\",\n          \"csv\": \"CSV\"\n        }\n      },\n      {\n        \"key\": \"frames\",\n        \"label\": \"Stack frames in the fingerprint\",\n        \"value\": \"5\",\n        \"type\": \"number\",\n        \"min\": 1,\n        \"max\": 50,\n        \"step\": 1\n      },\n      {\n        \"key\": \"similarity\",\n        \"label\": \"Similarity needed to merge groups\",\n        \"value\": \"1\",\n        \"type\": \"number\",\n        \"min\": 0.5,\n        \"max\": 1,\n        \"step\": \"any\",\n        \"help\": \"1 groups identical fingerprints only. Lower values also merge near matches.\"\n      },\n      {\n        \"key\": \"includeMessage\",\n        \"label\": \"Include the normalised message in the fingerprint\",\n        \"value\": false,\n        \"type\": \"checkbox\"\n      },\n      {\n        \"key\": \"includeLineNumbers\",\n        \"label\": \"Include line numbers in the fingerprint\",\n        \"value\": false,\n        \"type\": \"checkbox\"\n      },\n      {\n        \"key\": \"messageField\",\n        \"label\": \"Message field for JSON or CSV\",\n        \"value\": \"message\",\n        \"type\": \"text\",\n        \"maxLength\": 200\n      },\n      {\n        \"key\": \"stackField\",\n        \"label\": \"Stack field for JSON or CSV\",\n        \"value\": \"stack\",\n        \"type\": \"text\",\n        \"maxLength\": 200\n      },\n      {\n        \"key\": \"timeField\",\n        \"label\": \"Time field for JSON or CSV\",\n        \"value\": \"timestamp\",\n        \"type\": \"text\",\n        \"maxLength\": 200\n      },\n      {\n        \"key\": \"naiveTimestamps\",\n        \"label\": \"Times without a zone\",\n        \"value\": \"reject\",\n        \"type\": \"select\",\n        \"values\": [\n          \"reject\",\n          \"utc\"\n        ],\n        \"labels\": {\n          \"reject\": \"Reject missing time zones\",\n          \"utc\": \"Interpret as UTC\"\n        }\n      }\n    ],\n    \"registrationFamily\": \"report-ingest-analysis-reference\",\n    \"inputMaxLength\": 2000000,\n    \"inputErrorCode\": \"REPORT_INGEST_ANALYSIS_REFERENCE_TOO_LONG\",\n    \"note\": \"Runs in your browser in a background worker. Groups up to 2,000,000 characters of logs or JSON error exports.\",\n    \"experience\": {\n      \"automatic\": false,\n      \"single\": false,\n      \"inputMaxLength\": 2000000,\n      \"inputMode\": \"text\",\n      \"label\": \"Error logs or JSON error export\",\n      \"placeholder\": \"TypeError: Cannot read properties of undefined\\n    at render (app.js:10:5)\",\n      \"help\": \"Paste server or browser logs with stack traces, or an export from your error tracker. Up to 2,000,000 characters. Review the settings before running.\",\n      \"action\": null\n    },\n    \"mode\": \"explicit\",\n    \"interactive\": false\n  },\n  \"execution\": \"Browser interface\",\n  \"api\": null,\n  \"browser_agent\": {\n    \"supported\": true,\n    \"name\": \"run_current_tool\",\n    \"discovery\": \"WebMCP on the human page in a supporting browser\",\n    \"verification\": \"See audit/API-AUDIT.md; availability is not verification\"\n  }\n}\n```\n\n## Page guide\n\nPaste error logs or a JSON error export and group repeated errors by their stack trace fingerprint. Each group shows its count, first and last time seen and one full example.\n\n### How to use Error log grouper\n\n1. Paste error logs or a JSON, NDJSON or CSV error export.\n2. Choose how many stack frames make up a fingerprint.\n3. Run the grouping and review the largest groups first.\n4. Download the JSON report or the CSV of groups.\n\nHow can we improve this tool?\n\nReport a problem or share an idea.\n\nPlease leave out private information. Your message and the tool name go to our team via PostHog.\n\n## Useful next steps\n\n- [Regex tester](https://happytails.ai/en/developer-tools/regex-tester/) ([Markdown](https://happytails.ai/en/developer-tools/regex-tester.md))\n\n- [Unix timestamp converter](https://happytails.ai/en/developer-tools/unix-timestamp-converter/) ([Markdown](https://happytails.ai/en/developer-tools/unix-timestamp-converter.md))\n\n- [JSONL validator](https://happytails.ai/en/data-tools/jsonl-validator/) ([Markdown](https://happytails.ai/en/data-tools/jsonl-validator.md))\n\n## Stack formats\n\nFrames from V8 (Chrome and Node.js), Firefox and Safari, Java, Python and .NET are recognised. A text log is split into errors at each line that is not a stack frame. Python tracebacks are read with their final exception line.\n\n### How fingerprints work\n\nA fingerprint combines the error type with the top stack frames. File paths lose their origin, query string and bundle hashes such as app.3f2a1b9c.js, so builds of the same code group together. Line numbers and the message are left out unless you include them. Errors with no frames use the normalised message, where numbers, quoted text and ids are replaced by placeholders.\n\n### Merging near matches\n\nA similarity below 1 merges groups whose frames and message words have at least that Jaccard similarity. This can merge errors that are only related, so start at 1 and lower it only when groups look split.\n"
}