json-logs#
JSON structured logging reporter for the OCaml Logs library.
Overview#
Outputs log messages in JSON format for integration with log aggregation tools (ELK, Datadog, Splunk, Loki, etc.).
Each log entry includes:
timestamp: ISO 8601 / RFC 3339 formatlevel: app, debug, info, warning, errorsource: log source namemessage: formatted log message- Structured fields from
Logs.Tagvalues
Installation#
opam install json-logs
Usage#
let () =
Logs.set_reporter (Json_logs.reporter ());
Logs.set_level (Some Logs.Info);
Logs.info (fun m -> m "Server started on port %d" 8080)
Output:
{"timestamp":"2025-01-20T12:00:00Z","level":"info","source":"application","message":"Server started on port 8080"}
With Structured Tags#
let user_id = Logs.Tag.def "user_id" Format.pp_print_string
let request_id = Logs.Tag.def "request_id" Format.pp_print_string
let () =
let tags = Logs.Tag.(empty |> add user_id "123" |> add request_id "abc-456") in
Logs.info (fun m -> m "User logged in" ~tags)
Output:
{"timestamp":"2025-01-20T12:00:00Z","level":"info","source":"application","message":"User logged in","user_id":"123","request_id":"abc-456"}
API#
Json_logs.reporter ()- Create a JSON logging reporterJson_logs.json_escape- Escape strings for JSON outputJson_logs.level_to_string- Convert log level to string
Related Work#
Licence#
MIT License. See LICENSE.md for details.