{
  "slug": "log-parser",
  "name": "gizza-ai/log-parser",
  "version": "0.1.0",
  "title": "Log Parser — JSON, logfmt, syslog & Apache/nginx Access Logs — gizza.ai",
  "description": "Free log parser — auto-detects JSON/NDJSON, logfmt, syslog and Apache/nginx access logs into a filterable table, JSON, or CSV. Runs in your browser, no upload.",
  "tags": [
    "log parser",
    "log viewer",
    "log analyzer",
    "json logs",
    "ndjson",
    "logfmt",
    "syslog parser",
    "apache access log",
    "nginx access log",
    "combined log format",
    "clf",
    "log to csv",
    "log to table"
  ],
  "category": "developer",
  "urls": {
    "page": "https://gizza.ai/tools/log-parser/",
    "markdown": "https://gizza.ai/tools/log-parser/index.md",
    "descriptor": "https://gizza.ai/tools/log-parser/tool.json",
    "deep_link_example": "https://gizza.ai/tools/log-parser/?logs=127.0.0.1%20-%20-%20%5B10%2FOct%2F2000%3A13%3A55%3A36%20-0700%5D%20%22GET%20%2F%20HTTP%2F1.0%22%20200%202326%20%22-%22%20%22Mozilla%2F5.0%22&format=auto&output=table&level=all&filter=e.g.%20%2Fapi%20or%20timeout&regex=true&limit=200"
  },
  "cli": "gizza tool log-parser '127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] \"GET / HTTP/1.0\" 200 2326 \"-\" \"Mozilla/5.0\"'",
  "tool": {
    "description": "Auto-detect and parse raw logs into a structured, filterable table. Handles JSON/NDJSON, logfmt (key=value), syslog (RFC 3164/5424), and Apache/nginx access logs (common + combined). format='auto' (default) detects the format; output='table' (default) renders a Markdown table with a stats caption, or 'json'/'csv'. Filter with level (a unified minimum severity across formats — 5xx and 4xx access-log statuses map to error/warn) and filter (case-insensitive substring, or a regex when regex=true). limit caps the row count (default 200).",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "filter": {
          "default": "",
          "description": "Keep only lines that match this text. Case-insensitive substring by default; set regex=true to match a regular expression against the raw line. Blank = no filter.",
          "type": "string"
        },
        "format": {
          "default": "auto",
          "description": "Log format. 'auto' (default) detects it by majority vote over the first lines; or force 'json' (JSON/NDJSON), 'logfmt' (key=value pairs), 'syslog' (RFC 3164/5424), 'common' (Apache/nginx Common Log Format), or 'combined' (Common + referer + user-agent).",
          "enum": [
            "auto",
            "json",
            "logfmt",
            "syslog",
            "common",
            "combined"
          ],
          "type": "string"
        },
        "level": {
          "default": "all",
          "description": "Minimum severity to keep. 'all' (default) keeps every line; 'warn' keeps warnings and errors, etc. Severity is unified across formats: a JSON/logfmt level key, a syslog priority, or an HTTP status (5xx=error, 4xx=warn).",
          "enum": [
            "all",
            "error",
            "warn",
            "info",
            "debug",
            "trace"
          ],
          "type": "string"
        },
        "limit": {
          "default": 200,
          "description": "Maximum number of rows to output (1-5000). Applied after the level and text filters. Default 200.",
          "maximum": 5000,
          "minimum": 1,
          "type": "integer"
        },
        "logs": {
          "description": "The raw log text — one entry per line. Paste JSON/NDJSON, logfmt, syslog, or Apache/nginx access logs.",
          "type": "string"
        },
        "output": {
          "default": "table",
          "description": "Output shape. 'table' (default) is a Markdown table with a stats caption; 'json' is an array of one object per line; 'csv' is header + rows.",
          "enum": [
            "table",
            "json",
            "csv"
          ],
          "type": "string"
        },
        "regex": {
          "default": false,
          "description": "When true, treat 'filter' as a regular expression instead of a plain substring. Default false.",
          "type": "boolean"
        }
      },
      "required": [
        "logs"
      ],
      "type": "object"
    }
  }
}