jourlog is a Go package for writing structured logs to systemd-journald and reading logs back using journal filters.
go get github.com/yskomur/jourlogpackage main
import (
"github.com/coreos/go-systemd/v22/journal"
"github.com/yskomur/jourlog"
)
func main() {
logger := jourlog.NewJourlog()
logger.SetLogLevel(journal.PriInfo)
logger.SetEcho(true)
logger.Info("application started")
logger.Error("database unavailable")
}package main
import (
"fmt"
"log"
"github.com/yskomur/jourlog"
)
func main() {
reader, err := jourlog.NewJournalReader()
if err != nil {
log.Fatal(err)
}
defer reader.Close()
if err := reader.LastHour(); err != nil {
log.Fatal(err)
}
for {
message, err := reader.Retrieve()
if err != nil {
break
}
fmt.Println(message)
}
}NewJourlog()creates a logger.SetLogLevel(...)sets the minimum accepted priority.SetEcho(true)mirrors messages to stdout.- Priority helpers:
Emerge,Alert,Critical,Error,Warning,Notice,Info,Debug.
Each log record includes caller metadata fields (CODE_FILE, CODE_LINE, CODE_FUNC) in journald.
NewJournalReader()opens a journal reader.- Time filters:
SetSince,SetUntil,LastHour,LastDay,LastWeek,Today. - Match filters:
SetUnit,SetService,SetPriority,SetHostname,SetExecutable,SetMessageFilter,AddFilter. - Cursor helpers:
SeekHead,SeekTail,SeekCursor,GetCursor. - Limits and state:
SetLimit,ResetCounter,ClearFilters.
- Package docs:
go doc github.com/yskomur/jourlog - Rendered docs:
pkg.go.dev/github.com/yskomur/jourlog
See LICENSE.