Status
Development

OCaml Logging Library

A lightweight, type-safe logging library for OCaml with structured logging support and configurable output handlers.

OCaml
Functional Programming
Logging
Library

Echo Logging Library

Overview

Echo is a modern logging library for OCaml that provides type-safe, structured logging capabilities with seamless C interoperability. What sets Echo apart is its built-in support for C bindings, making it an ideal centralized logging solution for hybrid C/OCaml projects. Whether you're working with static C library dependencies or building mixed-language applications, Echo provides ready-to-use bindings that bridge the gap between OCaml's type safety and C's performance.

Built with functional programming principles, Echo offers a clean, expressive API for application logging with support for multiple output handlers, configurable log levels, and structured data formatting. The library is open-source and available through opam, the official OCaml package manager.

Key Features

C Interoperability

  • Ready-to-use C bindings for seamless integration with C libraries
  • Centralized logging solution for hybrid C/OCaml projects
  • Support for static C library dependencies
  • Unified logging interface across language boundaries

Type-Safe Logging

  • Strongly-typed logging API that prevents common logging errors at compile time
  • Support for structured logging with key-value pairs
  • Compile-time log level filtering for zero-cost abstractions

Flexible Output Handlers

  • Console output with colorized formatting
  • File-based logging with rotation support
  • Custom handler support for integration with external systems
  • Configurable formatting (JSON, plain text, custom formats)

Performance

  • Zero-cost abstractions when log levels are disabled
  • Efficient string formatting and buffering
  • Minimal runtime overhead

Architecture

Language: OCaml with functional programming patterns

Core Components:

  • Logger module with type-safe API
  • Handler system for output routing
  • Formatter system for log message formatting
  • Configuration module for runtime setup

Use Cases

  • Application debugging and monitoring
  • Production logging with structured data
  • Development tooling and diagnostics
  • Integration with logging aggregation services

Example Usage

open Echo

let logger = Logger.create ~name:"my_app" ()

let () =
  Logger.info logger "Application started" [];
  Logger.debug logger "Processing request" 
    [("user_id", Int 123); ("path", String "/api/data")];
  Logger.error logger "Failed to connect" 
    [("error", String "Connection timeout")]

Visit

Check out the source code and documentation on GitHub.