Packages / eta-log

eta-log v0.1.0 Native sidecar stdlib eta-native-v1 MIT

eta-log

Structured logging for Eta, backed by spdlog.

eta-log is a native sidecar that provides the %log-* runtime primitives used by the std.log Eta module. The high-level Eta API lives in std/log.eta; this package ships the compiled native library that makes those primitives available.

Quick start

(import std.log)

;; Use the default logger (writes to current-error-port)
(log:info "server started" '((port . 8080)))
(log:warn "slow query" '((ms . 1250) (table . "orders")))
(log:error "unexpected nil" '())

Module

Import std.log in your Eta programme:

(import std.log)

Sinks

A sink is a log destination. Compose one or more sinks into a logger.

ConstructorDescription
(log:make-stdout-sink)Coloured stdout sink (disable colour with :color? #f)
(log:make-stderr-sink)Coloured stderr sink
(log:make-file-sink path)Plain file sink; accepts :truncate? #t to overwrite on open
(log:make-rotating-sink path max-size max-files)Rolling file; rotates when max-size bytes reached
(log:make-daily-sink path hour minute max-files)Daily rolling file; rolls at hour:minute
(log:make-port-sink port)Writes to any open Eta output port
(log:make-error-port-sink)Writes to current-error-port (used by the default logger)
(import std.log)

;; File sink, truncated on each run
(let* ((sink   (log:make-file-sink "app.log" 'truncate? #t))
       (logger (log:make-logger "app" (list sink))))
  (log:info logger "application started"))
;; Multi-sink logger: stdout + rotating file
(import std.log)

(let* ((out  (log:make-stdout-sink))
       (file (log:make-rotating-sink "app.log" (* 10 1024 1024) 5))
       (log  (log:make-logger "app" (list out file))))
  (log:set-level! log 'debug)
  (log:info  log "ready")
  (log:debug log "connection pool size" '((size . 4))))

Loggers

FunctionDescription
(log:make-logger name sinks)Create a named logger with a list of sinks
(log:default)Return the session default logger (error-port sink)
(log:set-default! logger)Install a logger as the session default
(log:get-logger name)Look up a previously registered named logger, or #f
(import std.log)

(let ((logger (log:make-logger "risk" (list (log:make-stdout-sink)))))
  (log:info logger "model loaded"))

;; Retrieve a named logger anywhere in the session
(let ((logger (log:get-logger "risk")))
  (when logger
    (log:warn logger "model diverged")))

Logging calls

All level functions accept two call shapes:

(log:info msg)                 ; use default logger, no payload
(log:info msg payload)         ; use default logger, with alist payload
(log:info logger msg)          ; use explicit logger, no payload
(log:info logger msg payload)  ; use explicit logger, with alist payload
LevelFunction
Tracelog:trace
Debuglog:debug
Infolog:info
Warninglog:warn
Errorlog:error
Criticallog:critical
(import std.log)

(log:info  "order placed"    '((id . "ord-001") (qty . 100)))
(log:warn  "retry attempt"   '((n . 3) (max . 5)))
(log:error "payment failed"  '((code . 402) (msg . "insufficient funds")))

Level control

(import std.log)

(let ((logger (log:make-logger "svc" (list (log:make-stdout-sink)))))
  (log:set-level! logger 'warn)          ; this logger only emits warn+
  (display (log:level logger))           ; => warn
  (log:set-global-level! 'info)          ; global minimum across all loggers
  (log:flush-on! logger 'error)          ; auto-flush on every error
  (log:flush! logger))                   ; manual flush

Valid level symbols: 'trace 'debug 'info 'warn 'error 'critical 'off.

The environment variable ETA_LOG_LEVEL sets the initial level of the default logger when it is first created.

Formatters and patterns

(import std.log)

(let ((logger (log:make-logger "svc" (list (log:make-stdout-sink)))))
  ;; Structured JSON output (useful for log aggregators)
  (log:set-formatter! logger 'json)

  ;; Or a raw spdlog pattern string
  (log:set-pattern! logger "[%H:%M:%S] [%l] %v"))

Valid formatter symbols: 'human (default, timestamped) · 'json.

Shutdown

;; At programme exit: flush all sinks and release spdlog resources.
(log:shutdown!)

Environment

VariableEffect
ETA_LOG_LEVELInitial level for the default logger (trace debug info warn error critical off)
← All packages View source on GitHub →