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.

## 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.
- `/` - move up or down through all journal lists and log output, as well as changing the filtering mode in the filter window.
- `+` - 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)