mirror of
https://github.com/ocaml-tracing/ocaml-opentelemetry.git
synced 2026-03-10 04:35:46 -04:00
follow more closely the official OTEL recommendations, and also try to reduce global state. - use a class type for `Exporter.t` (instead of 1st class module `backend`) - have tracer, logger, metrics_emitter as explicit objects - keep a `Main_exporter` to make migration easier, but discouraged - add stdout_exporter and debug_exporter to opentelemetry.client
76 lines
2.2 KiB
OCaml
76 lines
2.2 KiB
OCaml
(** Logs.
|
|
|
|
See
|
|
{{:https://opentelemetry.io/docs/reference/specification/overview/#log-signal}
|
|
the spec} *)
|
|
|
|
open Common_
|
|
open Proto.Logs
|
|
|
|
type t = Proto.Logs.log_record
|
|
|
|
(** Severity level of a log event *)
|
|
type severity = Proto.Logs.severity_number =
|
|
| Severity_number_unspecified
|
|
| Severity_number_trace
|
|
| Severity_number_trace2
|
|
| Severity_number_trace3
|
|
| Severity_number_trace4
|
|
| Severity_number_debug
|
|
| Severity_number_debug2
|
|
| Severity_number_debug3
|
|
| Severity_number_debug4
|
|
| Severity_number_info
|
|
| Severity_number_info2
|
|
| Severity_number_info3
|
|
| Severity_number_info4
|
|
| Severity_number_warn
|
|
| Severity_number_warn2
|
|
| Severity_number_warn3
|
|
| Severity_number_warn4
|
|
| Severity_number_error
|
|
| Severity_number_error2
|
|
| Severity_number_error3
|
|
| Severity_number_error4
|
|
| Severity_number_fatal
|
|
| Severity_number_fatal2
|
|
| Severity_number_fatal3
|
|
| Severity_number_fatal4
|
|
|
|
let pp_severity = pp_severity_number
|
|
|
|
type flags = Proto.Logs.log_record_flags =
|
|
| Log_record_flags_do_not_use
|
|
| Log_record_flags_trace_flags_mask
|
|
|
|
let pp_flags = Proto.Logs.pp_log_record_flags
|
|
|
|
(** Make a single log entry *)
|
|
let make ?time ?(observed_time_unix_nano = Timestamp_ns.now_unix_ns ())
|
|
?severity ?log_level ?flags ?trace_id ?span_id (body : Value.t) : t =
|
|
let time_unix_nano =
|
|
match time with
|
|
| None -> observed_time_unix_nano
|
|
| Some t -> t
|
|
in
|
|
let trace_id = Option.map Trace_id.to_bytes trace_id in
|
|
let span_id = Option.map Span_id.to_bytes span_id in
|
|
let body = Value.conv body in
|
|
make_log_record ~time_unix_nano ~observed_time_unix_nano
|
|
?severity_number:severity ?severity_text:log_level ?flags ?trace_id ?span_id
|
|
?body ()
|
|
|
|
(** Make a log entry whose body is a string *)
|
|
let make_str ?time ?observed_time_unix_nano ?severity ?log_level ?flags
|
|
?trace_id ?span_id (body : string) : t =
|
|
make ?time ?observed_time_unix_nano ?severity ?log_level ?flags ?trace_id
|
|
?span_id (`String body)
|
|
|
|
(** Make a log entry with format *)
|
|
let make_strf ?time ?observed_time_unix_nano ?severity ?log_level ?flags
|
|
?trace_id ?span_id fmt =
|
|
Format.kasprintf
|
|
(fun bod ->
|
|
make_str ?time ?observed_time_unix_nano ?severity ?log_level ?flags
|
|
?trace_id ?span_id bod)
|
|
fmt
|