powerful logging library for Guile Scheme with flexibility and configuration in mind
backlog options
show done?show rejected?
Asynchronous Logging (Non-blocking I/O)
Asynchronous Logging (Non-blocking I/O)
status
todo
type
task
descriptionRight now, even though your compile-time macros and level-filtering are incredibly fast, writing to an output port is still a synchronous, blocking operation. If a disk slows down or a network socket experiences latency, your application code pauses.
Feature: An asynchronous logger wrapper.
Mechanics: The logging macro pushes the log data onto a lockless thread-safe queue (or a Guile channel) and immediately returns control to the application. A dedicated background thread or actor pulls from this queue and handles the actual I/O writing.
The Guile ecosystem heavily utilizes Fibers for cooperative concurrency.
Feature: Ensure first-class citizen compatibility with guile-fibers.
Mechanics: Provide a dedicated scriba-fibers module that uses non-blocking Fiber ports or concurrent channels, guaranteeing that logging operations never block the main fiber scheduler loop.scriba-12
Allow auto-logger to read from config files (env var still should take precedence)
Allow auto-logger to read from config files (env var still should take precedence)
status
todo
type
task
descriptionScheme files, YAML, TOML, JSON, etc
While environment variables are perfect for Twelve-Factor apps and Docker/Guix containers, complex applications often prefer a dedicated configuration file.
Improvement: Allow scriba-auto-logger to look for config files in the project root or etc
scriba-2
Add optional rolling file facilities
Add optional rolling file facilities
status
todo
type
task
descriptionIn production, logging to a single file indefinitely will eventually exhaust disk space.
Improvement: Implement a scriba-file-logger that accepts configuration for file rotation.
Mechanics: Support size-based rotation (e.g., #:max-size-mb 10) and time-based rotation (e.g., #:rotate-daily #t). You can manage file descriptors under the hood, seamlessly closing the old port, renaming the file (e.g., test.log to test.1.log), and opening a fresh one without stopping the application.scriba-8
Explain Log severities: what is info? what is warning? what is trace?
Explain Log severities: what is info? what is warning? what is trace?
Sensitive Data Masking (PII / Secret Filtering)
Sensitive Data Masking (PII / Secret Filtering)
status
todo
type
task
descriptionIn enterprise environments, inadvertently logging passwords, API keys, or personally identifiable information (PII) is a massive liability.
Feature: Data sanitization hooks.
Mechanics: Add a #:mask-fields option or a sanitization procedure hook to the logger constructor. If a key in the log context matches "password" or "secret", its value is automatically replaced with "[MASKED]" before the layout is rendered or serialized to JSON.scriba-13
Native HTTP/UDP Log Shippers
Native HTTP/UDP Log Shippers
status
todo
type
task
description
Right now, tools like Loki or Datadog have to scrape stdout or a syslog socket. Sending logs directly via network protocols can eliminate intermediate log-scraping daemons.
Feature: Network transport backends.
Mechanics: Create a scriba-http-logger or scriba-udp-logger that buffers logs in memory and flushes them in batches directly to a remote endpoint (like a Grafana Loki HTTP Push API or a Graylog GELF endpoint).scriba-14
descriptionWhen an error occurs in Scheme, printing just the error message often loses the most valuable asset: the stack trace.
Feature: An exception-aware log macro (e.g., log-exception).
Mechanics: Create a macro or a handler wrapper that catches Guile exceptions, automatically extracts the structured stack trace components, and formats them cleanly inside the JSON or console layout.scriba-15