Sign inSign up

lanbugsde/chrislog

By lanbugsde

Updated 4 months ago

ChrisLog — a fast, developer-focused log viewer written in Go.

Image
Developer tools
0

270

lanbugsde/chrislog repository overview

ChrisLOG

One container. One binary. One file. No dependencies.

ChrisLOG is a self-contained log aggregation and viewer built for developers and ops teams who want powerful observability without the complexity of multi-service stacks. No Redis, no Elasticsearch, no Kafka — just a single ~30 MB Alpine container backed by SQLite.


Features

  • Multi-source ingestion — Syslog UDP/TCP (RFC 3164 & 5424), GELF UDP (with chunking), Docker socket streaming, and HTTP JSON endpoint
  • Real-time Web UI — Vue 3 frontend with WebSocket live stream, log level coloring, column resize, row expansion, and instant filter/sort
  • Full-text search — SQLite FTS5 with automatic regex detection; queries containing metacharacters are treated as regex automatically
  • GROK enrichment — Logstash-compatible pattern matching embedded in the binary (Apache, Nginx, HAProxy, PostgreSQL, Redis, Java, syslog, firewalls, and more)
  • Log retention — Configurable by age (days) and database size (bytes), cleaned up in the background every 60 seconds
  • HTTP Basic Auth — Optional authentication for the Web UI via environment variables
  • Tiny footprint — ~13 MB Go binary, ~30 MB Docker image, single SQLite database file

Quick Start

docker run -d -p 8080:8080 lanbugsde/chrislog

Open http://localhost:8080 to access the Web UI.


Ports

PortProtocolPurpose
8080TCPWeb UI & HTTP ingest
514UDPSyslog UDP
514TCPSyslog TCP
12201UDPGELF UDP

Configuration

All settings are controlled via environment variables:

VariableDefaultDescription
WEB_USERNAMEadminHTTP Basic Auth username
WEB_PASSWORD(empty)HTTP Basic Auth password (disabled when empty)
RETENTION_DAYS30Delete logs older than N days (0 = disabled)
RETENTION_BYTES0Max DB size in bytes; oldest logs removed first
DB_PATH/data/chrislog.dbSQLite database file path
DEFAULT_FILTER_REGEX(empty)Pre-filled search expression on page load
GROK_PATTERNS(empty)Comma-separated GROK pattern names to apply
GROK_PATTERN_DIR(empty)Directory for custom .grok pattern files
LOG_LEVELINFOChrisLOG's own log verbosity

Docker Compose Example

services:
  chrislog:
    image: lanbugsde/chrislog
    ports:
      - "8080:8080"
      - "514:514/udp"
      - "514:514/tcp"
      - "12201:12201/udp"
    volumes:
      - chrislog-data:/data
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      WEB_USERNAME: admin
      WEB_PASSWORD: secret
      RETENTION_DAYS: "14"

volumes:
  chrislog-data:

HTTP Ingest

Send logs directly from any application:

curl -X POST http://localhost:8080/api/ingest \
  -H "Content-Type: application/json" \
  -d '{"message": "deploy finished", "level": "info", "tag": "ci"}'

The ingest endpoint requires no authentication, making it easy to integrate with external services and scripts.


Source Code

https://github.com/lanbugs/chrislog

Tag summary

Content type

Image

Digest

sha256:ee1938cf2

Size

7.7 MB

Last updated

4 months ago

docker pull lanbugsde/chrislog