{"id":51027159,"url":"https://github.com/czfadmin/pino-lens","last_synced_at":"2026-06-21T20:30:41.626Z","repository":{"id":355333088,"uuid":"1154313077","full_name":"czfadmin/pino-lens","owner":"czfadmin","description":"A VS Code extension (desktop + web) for opening, visualizing, and filtering pino JSON logs — right inside your editor.","archived":false,"fork":false,"pushed_at":"2026-06-02T11:49:17.000Z","size":1552,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-02T13:27:31.213Z","etag":null,"topics":["extension","pino","vscode"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/czfadmin.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-10T08:45:55.000Z","updated_at":"2026-06-02T11:49:21.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/czfadmin/pino-lens","commit_stats":null,"previous_names":["czfadmin/pino-lens"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/czfadmin/pino-lens","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czfadmin%2Fpino-lens","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czfadmin%2Fpino-lens/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czfadmin%2Fpino-lens/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czfadmin%2Fpino-lens/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/czfadmin","download_url":"https://codeload.github.com/czfadmin/pino-lens/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czfadmin%2Fpino-lens/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34625624,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["extension","pino","vscode"],"created_at":"2026-06-21T20:30:40.833Z","updated_at":"2026-06-21T20:30:41.621Z","avatar_url":"https://github.com/czfadmin.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Pino Lens\n\nA VS Code extension (desktop + web) for opening, visualizing, and filtering [pino](https://getpino.io/) JSON logs — right inside your editor.\n\nStop squinting at raw NDJSON files. `Pino Lens` gives you an interactive table with level badges, timestamps, full-text search, and a detail panel for any row, all without leaving VS Code.\n\n![screenshot.png](images/screenshot.png)\n---\n\n## Features\n\n- **One-click open** — open any pino log file from the Command Palette, the Explorer context menu, or the editor title bar.\n- **NDJSON parsing** — parses line-delimited JSON (one object per line) and maps standard pino level numbers to human-readable labels (`trace` / `debug` / `info` / `warn` / `error` / `fatal`).\n- **Interactive filtering**\n  - Full-text search across message and JSON payload\n  - Level filter (select one or more levels)\n  - Time-range filter\n  - Cap rendered rows to keep the view snappy on large files\n- **Visual table** — color-coded level badges, formatted timestamp, message column, and original line number for easy cross-reference.\n- **Detail panel** — click any row to inspect the complete JSON payload.\n- **Parse diagnostics** — invalid JSON lines are flagged separately so you never lose sight of malformed entries.\n- **Works everywhere** — runs in both the VS Code Desktop host and the VS Code for the Web (vscode.dev / github.dev) browser host.\n\n---\n\n## Supported File Types\n\n| Extension | Description |\n|-----------|-------------|\n| `.log`    | Generic log files |\n| `.json`   | JSON files |\n| `.jsonl`  | JSON Lines |\n| `.ndjson` | Newline-delimited JSON |\n| `.txt`    | Plain-text log files |\n\n---\n\n## Getting Started\n\n### Open a log file\n\n**Method 1 — Command Palette**\n\n1. Press `Ctrl+Shift+P` (Windows/Linux) or `Cmd+Shift+P` (macOS).\n2. Type **Pino Lens: Open Log File** and press Enter.\n3. Select your `.log` / `.json` / `.jsonl` / `.ndjson` file.\n\n**Method 2 — Explorer context menu**\n\nRight-click any supported file in the Explorer sidebar and choose **Open with Pino Lens**.\n\n**Method 3 — Editor context menu / title bar**\n\nWith a supported file open in the editor, right-click the editor area or the tab title and choose **Open with Pino Lens**.\n\n**Method 4 — Keyboard shortcut**\n\nWith a supported file focused, press `Ctrl+Shift+P, Ctrl+Shift+L` (Windows/Linux) or `Cmd+Shift+P, Cmd+Shift+L` (macOS).\n\n### Filtering logs\n\nOnce the viewer is open, use the filter bar at the top to:\n\n- Type a keyword to search across all fields.\n- Toggle log levels to hide/show entries by severity.\n- Set a time range to scope the view to a specific window.\n- Limit the row count to keep rendering fast on very large files.\n\n---\n\n## Expected Log Format\n\n`Pino Lens` expects **one JSON object per line** (NDJSON). Standard pino output already uses this format:\n\n```jsonl\n{\"level\":30,\"time\":1713916800000,\"pid\":1234,\"hostname\":\"server-1\",\"msg\":\"api started\",\"service\":\"gateway\"}\n{\"level\":40,\"time\":1713916860000,\"pid\":1234,\"hostname\":\"server-1\",\"msg\":\"slow query\",\"duration\":1523}\n{\"level\":50,\"time\":1713916900000,\"pid\":1234,\"hostname\":\"server-1\",\"msg\":\"request failed\",\"err\":{\"code\":\"E_PIPE\"}}\n```\n\nPino level numbers are mapped as follows:\n\n| Number | Label  |\n|--------|--------|\n| 10     | trace  |\n| 20     | debug  |\n| 30     | info   |\n| 40     | warn   |\n| 50     | error  |\n| 60     | fatal  |\n\nAny line that is not valid JSON is listed in the **Parse Diagnostics** section at the bottom of the viewer.\n\n---\n\n## Current Limitations\n\n- Each file is loaded fully into memory before rendering — very large files (hundreds of MB) may be slow.\n- Only file-based inspection is supported; live log streaming is not yet implemented.\n- Non-standard pino `time` field formats are accepted on a best-effort basis.\n\n---\n\n## Roadmap\n\n### Completed\n\n- [x] Saved filter presets\n- [x] Column customization (show/hide fields)\n- [x] Field-specific quick filters (click a value to filter by it)\n- [x] Follow mode for appended log files (live tail)\n- [x] Export filtered results\n\n### Planned\n\n#### Performance\n- [x] Virtual / windowed scrolling — render only visible rows so very large files stay responsive\n- [x] Incremental (streaming) file load — parse and display lines as they are read rather than waiting for the full file\n\n#### Search \u0026 Filtering\n- [x] Regex search — allow regular expression patterns in the search bar\n- [x] Compound filter expressions — combine field conditions with AND / OR / NOT operators\n- [x] Custom log-level mapping — let users configure non-standard level numbers to label names\n\n#### Visualisation \u0026 Analysis\n- [x] Log statistics panel — bar / timeline chart showing level distribution and event frequency over time\n\n#### UX \u0026 Navigation\n- [ ] Full keyboard navigation — move between rows, open detail panel, and toggle filters without a mouse\n- [ ] Syntax highlighting in detail panel — colorise keys, strings, numbers, and booleans in the JSON inspector\n#### Integration\n- [ ] Attach to running process — stream pino output directly from a terminal or VS Code task instead of a static file\n\n---\n\n## Development\n\n```bash\npnpm install          # install dependencies\npnpm run compile      # build both desktop and web targets\npnpm run compile:desktop  # build desktop only\npnpm run compile:web      # build web only\npnpm run test:desktop # run desktop tests\npnpm run test:web     # run web tests\npnpm run lint         # lint TypeScript sources\n```\n\nFor iterative development, use the watch tasks:\n\n```bash\n# Desktop (run both in separate terminals)\npnpm run watch-desktop:tsc\npnpm run watch-desktop:esbuild\n\n# Web\npnpm run watch-web:tsc\npnpm run watch-web:esbuild\n```\n\n### Architecture\n\n| Path | Role |\n|------|------|\n| `src/desktop/extension.ts` | Desktop extension entry point |\n| `src/web/extension.ts` | Web extension entry point |\n| `src/shared/pinoLog.ts` | NDJSON parser and data model |\n| `src/shared/logViewerPanel.ts` | Webview panel logic (shared) |\n| `src/webview/pinoLogViewer.ts` | Webview UI script |\n\n---\n\n## License\n\nSee [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fczfadmin%2Fpino-lens","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fczfadmin%2Fpino-lens","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fczfadmin%2Fpino-lens/lists"}