<p align="center"> <img src="/img/logo.jpg"> </p> <p align="center"> <a href="https://pkg.go.dev/github.com/Lifailon/lazyjournal"><img src="https://pkg.go.dev/badge/github.com/Lifailon/lazyjournal.svg" alt="Go Reference"></a> <a href="https://goreportcard.com/report/github.com/Lifailon/lazyjournal"><img src="https://goreportcard.com/badge/github.com/Lifailon/lazyjournal" alt="Go Report"></a> <a href="https://github.com/Lifailon/lazyjournal/actions/workflows/build.yml"><img title="Actions Build"src="https://img.shields.io/github/actions/workflow/status/Lifailon/lazyjournal/build.yml?logo=GitHub-Actions"></a> <a href="https://aur.archlinux.org/packages/lazyjournal"><img title="Arch Linux"src="https://img.shields.io/aur/version/lazyjournal?logo=arch-linux"></a> <a href="https://github.com/Lifailon/Kinozal-Bot/blob/rsa/LICENSE"><img title="License"src="https://img.shields.io/github/license/Lifailon/Kinozal-Bot?logo=readme&color=white"></a> </p> Terminal user interface for `journalctl`, file system logs, as well **Docker** and **Podman** containers for quick viewing and filtering with fuzzy find, regex support (like `fzf` and `grep`) and coloring the output, written in Go with the [awesome-gocui](https://github.com/awesome-gocui/gocui) (fork [gocui](https://github.com/jroimartin/gocui)) library. This tool is inspired by and with love for [LazyDocker](https://github.com/jesseduffield/lazydocker) and [LazyGit](https://github.com/jesseduffield/lazygit), as well as is listed as [Awesome-TUIs](https://github.com/rothgar/awesome-tuis), check out the other useful projects in the repository page. ![interface](/img/fuzzy.jpg) ## Functional - Simple installation, to run just download one executable file without any dependencies. - List of all units (services, sockets, etc.) via `systemctl` with current running status. - View all system and user journals via `journalctl` (tool for reading logs from [systemd-journald](https://github.com/systemd/systemd/tree/main/src/journal)). - List of all system boots for kernel log output. - File system logs (example, for `Apache` or `Nginx`), as well as `syslog` or `messages`, `dmesg` (kernel), etc. - List of all log files of descriptors used by processes, as well as all log files in the home directories of users. - Reading archived logs (`gz`, `xz` or `bz2` format), packet capture (`pcap` format) and Apple System Log (`asl` format). - Docker containers, Podman pods and Swarm services logs (including offline). - Filtering lists to find the desired journal. - Displays the currently selected log and filters output in real-time. Supports 3 filtering modes: - **Default** - case sensitive exact search. - **Fuzzy** - custom inexact case-insensitive search (searches for all phrases separated by a space anywhere on a line). - **Regex** - search with regular expression support (based on `regexp` library), case insensitive by default (in case a regular expression syntax error occurs, the input field will be highlighted in red). Supported coloring groups for output: - **Green** - keywords indicating success. - **Red** - keywords indicating an error. - **Blue** - statuses, (info, debug, etc), actions (install, update, etc) and HTTP methods (GET, POST, etc). - **Light Blue** - numbers (date, time, bytes, ip and mac-addresses). - **Yellow** - known names (host name and system users) and warnings. - **Purple** - url and full paths in the file system. - **Custom** - unix processes. ## Install Binaries are available for download on the [releases](https://github.com/Lifailon/lazyjournal/releases) page. List of supported systems and architectures in which I was able to check the functionality: | OS | amd64 | arm64 | Systems | | - | - | - | - | | Linux | ✔ | ✔ | Raspberry Pi, Oracle Linux (RHEL-based in WSL), Ubuntu Server 20.04.6 and above | | Darwin | ✔ | | macOS Sequoia 15.2 | | BSD-based | ✔ | | OpenBSD 7.6 and FreeBSD 14.2 | | Windows | ✔ | | Windows 10 and 11 | ### Unix-based Run the command in the console to quickly install or update the stable version for Linux, macOS or the BSD-based system: ```shell curl -sS https://raw.githubusercontent.com/Lifailon/lazyjournal/main/install.sh | bash ``` This command will run a script that will download the latest executable from the GitHub repository into your current user's home directory along with other executables (or create a directory) and grant execution permission. ### Arch Linux If you an Arch Linux user you can also install from the [AUR](https://aur.archlinux.org/packages/lazyjournal): ```shell paru -S lazyjournal ``` Thank you [Matteo Giordano](https://github.com/malteo) for upload and update the package in AUR. ### Windows Use the following command to quickly install in your PowerShell console: ```PowerShell Invoke-RestMethod https://raw.githubusercontent.com/Lifailon/lazyjournal/main/install.ps1 | Invoke-Expression ``` Supports reading containers logs as well as searching for logs in the following directories: - `Program Files` - `Program Files (x86)` - `AppData\Local` for current user - `AppData\Roamin` for current user To read logs, automatic detection of the following encodings is supported: - `UTF-8` - `UTF-16 with BOM` - `UTF-16 without BOM` - `Windows-1251` by default ### Go Package You can also use Go for install the dev version ([Go](https://go.dev/doc/install) must be installed in the system): ```shell go install github.com/Lifailon/lazyjournal@latest ``` ### Others If you use other packag manager and want this package to be present there as well, open an issue or load it yourself and make [Pull requests](https://github.com/Lifailon/lazyjournal/pulls). ## Usage You can run the interface from anywhere: ```shell lazyjournal # Run interface lazyjournal --help, -h # Show help lazyjournal --version, -v # Show version ``` Access to all system logs and containers may require elevated privileges for the current user. ## Build Clone the repository and run the project: ```shell git clone https://github.com/Lifailon/lazyjournal cd lazyjournal go run main.go ``` Check the source code on the linters using [golangci-lint](https://github.com/golangci/golangci-lint) and build binaries for different platforms and systems: ```shell bash build.sh ``` ## Hotkeys - `Tab` - switch between windows. - `Shift+Tab` - return to previous window. - `Left/Right` - switch between journal lists in the selected window. - `Enter` - selection a journal from the list to display log output. - `<Up/PgUp>/<Down/PgDown>` - move up or down through all journal lists and log output, as well as changing the filtering mode in the filter window. - `<Shift/Alt>+<Up/Down>` - quickly move up or down through all journal lists and log output every `10` or `100/500` lines. - `Ctrl+E/Home` - go to top of log. - `Ctrl+D/End` - go to the end of the log. - `Ctrl+W` - clear text input field for filter to quickly update current log output without filtering. - `Ctrl+C` - exit. ## Contributing Any contribution is welcome. If you want to implement a feature or fix something, please [open an issue](https://github.com/Lifailon/lazyjournal/issues) first. ## Alternatives - [lnav](https://github.com/tstack/lnav) - The Logfile Navigator is a **log file** viewer for the terminal. - [Dozzle](https://github.com/amir20/dozzle) - is a small lightweight application with a web based interface to monitor **Docker logs**. If you like using TUI tools, try [multranslate](https://github.com/Lifailon/multranslate) for translating text in multiple translators simultaneously, with support for translation history and automatic language detection. ## License This project is licensed under the **MIT License**. See the [LICENSE](LICENSE) file for details. Copyright (C) 2024 Lifailon (Alex Kup)