{"id":51845212,"url":"https://github.com/jgaa/lgx","last_synced_at":"2026-07-23T11:30:32.925Z","repository":{"id":350856959,"uuid":"1153638880","full_name":"jgaa/lgx","owner":"jgaa","description":"LGX is a high-performance log explorer for developers and DevOps, designed to handle large files with fast indexing, smart filtering, and clear visual insights","archived":false,"fork":false,"pushed_at":"2026-06-25T14:15:13.000Z","size":5300,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-25T15:27:13.785Z","etag":null,"topics":["cpp","logviewer","qt"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jgaa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":null,"dco":null,"cla":null}},"created_at":"2026-02-09T14:29:34.000Z","updated_at":"2026-06-25T14:16:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jgaa/lgx","commit_stats":null,"previous_names":["jgaa/lgx"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jgaa/lgx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgaa%2Flgx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgaa%2Flgx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgaa%2Flgx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgaa%2Flgx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jgaa","download_url":"https://codeload.github.com/jgaa/lgx/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jgaa%2Flgx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35801472,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-23T02:00:06.683Z","response_time":57,"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":["cpp","logviewer","qt"],"created_at":"2026-07-23T11:30:32.124Z","updated_at":"2026-07-23T11:30:32.919Z","avatar_url":"https://github.com/jgaa.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LGX: High-Performance Multi-Source Log Viewer\n\n![Screen dump](images/lgx.jpg)\n\n## Vision \u0026 Goals\n\nThe goal of this project is to build a log viewer for Linux that is fast, easy to use, scalable, and capable of handling both log files and log streams. \n\nThe application should feel closer to an IDE for logs than a traditional text viewer:\n\n* Fast, responsive UI regardless of log size\n* Work with multiple open logs\n* Easy marking of log lines with multiple colors\n* Flexible filtering views\n* Direct support for log streams from Docker, Systemd, and Android (connected devices)\n* Correct parsing and coloring for common log formats (not just naive keyword searches prone to false positives)\n\nIn short: a log viewer for serious developers and DevOps professionals.\n\nI have used `glogg` as my log viewer of choice for a long time, but it is beginning to show its age. It also lacks built-in support for log streams. Viewing and analyzing logs is an important part of my daily work, so having the best tool available matters.\n\nThis is not the first log viewer I have created, but it is by far the best.\n\n## Features\n\n* Open multiple logs in tabs, like a web browser\n* Open local files, pipe streams, Systemd journal, Docker container logs, and Android `logcat` streams\n* Apply multiple filters to a single log source\n* Separate pane for marked lines\n* Treat streams like normal logs: follow, navigate, filter, and mark\n* Auto-detect and colorize common log formats (generic text, Logfault-style, Logcat, Systemd)\n* Per-source format override when auto-detection is insufficient\n* Fast navigation (first/last line, ±10%, next/previous warning or error)\n* Jump to an exact line number\n* Optional follow mode for live logs\n* Optional line wrapping\n* Adjustable zoom (UI, mouse, keyboard)\n* Selection-aware copy (single and multi-line)\n* Per-line actions: mark/unmark, copy, expanded view\n* Filter and marked views as horizontal or vertical splits\n* Recent file and stream history\n* Session-aware UI (wrapping, scanner selection, etc.)\n\n## How it works\n\n### Streams as files\n\nLive sources (pipe commands, Docker logs, Android logcat, Systemd logs) are handled as stream providers.\n\nThey write incoming log events to a temporary file and reuse the same indexing, paging, and line-fetching pipeline as regular log-files.\n\nThis gives streamed logs the same behavior as file-backed logs.\n\n### Fast initial scanning\n\nThe first pass over a source is optimized for startup speed.\n\nLog scanners provide fast line-level classification so LGX can quickly build a lightweight index (offsets, line boundaries, log levels). This allows the UI to become usable quickly, even for very large files.\n\nScanners also support incremental updates. When a file grows or a stream appends data, LGX extends the existing state instead of rebuilding it.\n\n### Memory-conscious paging and LRU cache\n\nLGX does not keep full log contents in memory.\n\nInstead, it stores metadata (page descriptors, line counts, indexing data), while actual text pages are stored in a shared LRU page cache.\n\n* Active pages remain in memory\n* Older, unused pages are evicted\n\nThis keeps large logs responsive without turning each open tab into a full in-memory copy.\n\n## How to Use\n\n### Opening logs\n\nUse the menus to open sources:\n\n* `File -\u003e Open` — open a file\n* `Sources -\u003e Open Pipe Stream` — run a command (e.g. `journalctl -f`)\n* `Sources -\u003e Docker -\u003e Open Running Containers`\n* `Sources -\u003e Logcat -\u003e Open Devices`\n* `File -\u003e Recent` / `Sources -\u003e Recent` — reopen previous sources\n\n### Main view controls\n\nThe toolbar operates on the main tab:\n\n* Toggle follow mode\n* Toggle line wrapping\n* Jump to first/last line\n* Jump ±10%\n* Jump to next/previous warning or error\n\nThe status bar shows:\n\n* Source\n* Line count\n* Current line\n* Format\n* File size\n* Ingestion rate\n* Zoom level\n\nJump operations use the page cache, making them fast even on large logs.\n\n### Menus and context menus\n\nUseful menu paths:\n\n* `View -\u003e Follow -\u003e Enabled`\n* `View -\u003e Log Lines -\u003e Wrap long lines`\n* `View -\u003e Zoom`\n* `View -\u003e Format` (override scanner)\n* `View -\u003e Go to Line`\n* `Windows -\u003e Add Filter View`\n* `Windows -\u003e Add Marked View`\n\nContext menu (log view):\n\n* Right-click → `Copy Line`, `Copy Selection`, `Show`\n* Long-press → expanded line view\n* Gutter click → mark/unmark line. If you hold down keys 1–5, you get different colors for the mark.\n\n### Keyboard and mouse shortcuts\n\n* `f` — toggle follow mode\n* `Ctrl+L` — go to line\n* `Ctrl+F` — horizontal filter split\n* `Ctrl+Shift+F` — vertical filter split\n* `Ctrl+M` — horizontal marked split\n* `Ctrl+Shift+M` — vertical marked split\n* Arrow keys — scroll by line\n* `PgUp` / `PgDown` — scroll by page\n* `Left` / `Right` — horizontal scroll (when wrapping is off)\n* `Ctrl+Left` / `Ctrl+Right` — jump to start/end of line\n* `Ctrl + Mouse Wheel` — zoom\n* Mouse wheel — scroll\n* Scrollbars — manual navigation\n* Double-click zoom value → reset to 100%\n\nBehavior notes:\n\n* Scrolling up disables follow mode\n* Wrapping disables horizontal scrolling\n* Copy works on the current selection\n\n## Build from Source\n\nLGX uses CMake, Qt 6, Boost headers, QCoro, and optionally `libsystemd` for the Systemd source.\n\n### Debian / Ubuntu\n\n```sh\nsudo apt install \\\n  build-essential cmake ninja-build git pkg-config \\\n  qt6-base-dev qt6-declarative-dev qt6-svg-dev \\\n  libboost-dev libsystemd-dev\n```\n\n### Fedora\n\n```sh\nsudo dnf install \\\n  gcc-c++ cmake ninja-build git pkgconf-pkg-config \\\n  qt6-qtbase-devel qt6-qtdeclarative-devel qt6-qtsvg-devel \\\n  boost-devel systemd-devel\n```\n\n### Arch Linux\n\n```sh\nsudo pacman -S \\\n  base-devel cmake ninja git pkgconf \\\n  qt6-base qt6-declarative qt6-svg \\\n  boost systemd\n```\n\n### Build\n\n```sh\ncmake -S . -B build -G Ninja\ncmake --build build\n```\n\nThe application binary will be available as `build/bin/lgx`.\n\n## Systemd\n\nTo access full system logs (not just your user logs), add your user to the appropriate group:\n\n```sh\nsudo usermod -aG systemd-journal $USER\n```\n\nThen log out and back in.\n\nTo disable the Systemd source at configure time:\n\n```sh\ncmake -S . -B build -G Ninja -DLGX_ENABLE_SYSTEMD_SOURCE=OFF\n```\n\n## Flatpak\n\nThe app is distributed for Linux as a *Flatpak*. Get the newest `.flatpak` bundle from the latest GitHub release.\n\n### Install Flatpak\n\nInstall Flatpak with your distro package manager:\n\nDebian/Ubuntu:\n\n```sh\napt install flatpak\n```\n\nFedora:\n\n```sh\ndnf install flatpak\n```\n\nopenSUSE:\n\n```sh\nzypper install flatpak\n```\n\nArch Linux:\n\n```sh\npacman -S flatpak\n```\n\nLog out and back in if your desktop session does not immediately pick up Flatpak integration.\n\n### Install LGX Flatpak\n\nDownload the release artifact, for example `lgx-v0.2.5.flatpak`, then install it for your user:\n\n```sh\nflatpak install --user ./lgx-v0.2.5.flatpak\n```\n\nOn most distributions, it will be available from the start menu under `Development`. \nIf you just installed the flatpak runtime, you might have to log out and back in.\n\nYou can also run it directly from the shell:\n\n```sh\nflatpak run eu.lastviking.lgx\n```\n\nTo update to a newer downloaded bundle:\n\n```sh\nflatpak install --user ./lgx-v0.2.6.flatpak\n```\n\n## Status\n\n**Beta**\n\n## Blog posts about lgx\n\n- [On lastviking.eu](https://lastviking.eu/tags/lgx.html)\n\n*Add an issue if you want a link to your own blog post about lgx or related content*. \n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjgaa%2Flgx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjgaa%2Flgx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjgaa%2Flgx/lists"}