144 lines
2.6 KiB
Markdown
144 lines
2.6 KiB
Markdown
# LogWisp - Simple Log Streaming
|
|
|
|
A lightweight log streaming service that monitors files and streams updates via Server-Sent Events (SSE).
|
|
|
|
## Philosophy
|
|
|
|
LogWisp follows the Unix philosophy: do one thing and do it well. It monitors log files and streams them over HTTP/SSE. That's it.
|
|
|
|
## Features
|
|
|
|
- Monitors multiple files and directories
|
|
- Streams log updates in real-time via SSE
|
|
- Supports both plain text and JSON formatted logs
|
|
- Automatic file rotation detection
|
|
- Simple TOML configuration
|
|
- No authentication or complex features - use a reverse proxy if needed
|
|
|
|
## Quick Start
|
|
|
|
1. Build:
|
|
```bash
|
|
./build.sh
|
|
```
|
|
|
|
2. Run with defaults (monitors current directory):
|
|
```bash
|
|
./logwisp
|
|
```
|
|
|
|
3. View logs:
|
|
```bash
|
|
curl -N http://localhost:8080/stream
|
|
```
|
|
|
|
## Configuration
|
|
|
|
LogWisp looks for configuration at `~/.config/logwisp.toml`. If not found, it uses sensible defaults.
|
|
|
|
Example configuration:
|
|
```toml
|
|
port = 8080
|
|
|
|
[monitor]
|
|
check_interval_ms = 100
|
|
|
|
[[monitor.targets]]
|
|
path = "/var/log"
|
|
pattern = "*.log"
|
|
|
|
[[monitor.targets]]
|
|
path = "/home/user/app/logs"
|
|
pattern = "app-*.log"
|
|
|
|
[stream]
|
|
buffer_size = 1000
|
|
```
|
|
|
|
## API
|
|
|
|
- `GET /stream` - Server-Sent Events stream of log entries
|
|
|
|
Log entry format:
|
|
```json
|
|
{
|
|
"time": "2024-01-01T12:00:00Z",
|
|
"source": "app.log",
|
|
"level": "error",
|
|
"message": "Something went wrong",
|
|
"fields": {"key": "value"}
|
|
}
|
|
```
|
|
|
|
## Building from Source
|
|
|
|
Requirements:
|
|
- Go 1.23 or later
|
|
|
|
```bash
|
|
go mod download
|
|
go build -o logwisp ./src/cmd/logwisp
|
|
```
|
|
|
|
## Usage Examples
|
|
|
|
### Basic Usage
|
|
```bash
|
|
# Start LogWisp (monitors current directory by default)
|
|
./logwisp
|
|
|
|
# In another terminal, view the stream
|
|
curl -N http://localhost:8080/stream
|
|
```
|
|
|
|
### With Custom Config
|
|
```bash
|
|
# Create config
|
|
cat > ~/.config/logwisp.toml << EOF
|
|
port = 9090
|
|
|
|
[[monitor.targets]]
|
|
path = "/var/log/nginx"
|
|
pattern = "*.log"
|
|
EOF
|
|
|
|
# Run
|
|
./logwisp
|
|
```
|
|
|
|
### Production Deployment
|
|
|
|
For production use, consider:
|
|
|
|
1. Run behind a reverse proxy (nginx, caddy) for SSL/TLS
|
|
2. Use systemd or similar for process management
|
|
3. Add authentication at the proxy level if needed
|
|
4. Set appropriate file permissions on monitored logs
|
|
|
|
Example systemd service:
|
|
```ini
|
|
[Unit]
|
|
Description=LogWisp Log Streaming Service
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=logwisp
|
|
ExecStart=/usr/local/bin/logwisp
|
|
Restart=always
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
## Design Decisions
|
|
|
|
- **No built-in authentication**: Use a reverse proxy
|
|
- **No TLS**: Use a reverse proxy
|
|
- **No complex features**: Follows Unix philosophy
|
|
- **File-based configuration**: Simple, no CLI args needed
|
|
- **SSE over WebSocket**: Simpler, works everywhere
|
|
|
|
## License
|
|
|
|
BSD-3-Clause |