mirror of
https://github.com/ocaml-tracing/ocaml-trace.git
synced 2026-03-07 18:37:56 -05:00
update readme
This commit is contained in:
parent
c8f88f44ea
commit
69f8447c9a
2 changed files with 61 additions and 0 deletions
61
README.md
61
README.md
|
|
@ -13,6 +13,67 @@ a library or application, either by hand or via a ppx.
|
||||||
- [x] counters
|
- [x] counters
|
||||||
- [ ] other metrics?
|
- [ ] other metrics?
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
To instrument your code, you can simply add `trace` to your dune/opam files, and then
|
||||||
|
write code like such:
|
||||||
|
|
||||||
|
```ocaml
|
||||||
|
let f x =
|
||||||
|
Trace.with_span ~__FILE__ ~__LINE__ "inside-f" @@ fun _sp ->
|
||||||
|
(* … code for f *)
|
||||||
|
|
||||||
|
let g x =
|
||||||
|
Trace.with_span ~__FILE__ ~__LINE__ "inside-g" @@ fun _sp ->
|
||||||
|
let y = f x in
|
||||||
|
(* … code for f *)
|
||||||
|
|
||||||
|
let () =
|
||||||
|
Some_trace_backend.setup () @@ fun () ->
|
||||||
|
let result = g 42 in
|
||||||
|
print_result result
|
||||||
|
```
|
||||||
|
|
||||||
|
The file `test/t1.ml` follows this pattern, using `trace-tef` as a simple backend
|
||||||
|
that emits one JSON object per span/message:
|
||||||
|
|
||||||
|
```ocaml
|
||||||
|
let run () =
|
||||||
|
Trace.set_process_name "main";
|
||||||
|
Trace.set_thread_name "t1";
|
||||||
|
|
||||||
|
let n = ref 0 in
|
||||||
|
|
||||||
|
for _i = 1 to 50 do
|
||||||
|
Trace.with_span ~__FILE__ ~__LINE__ "outer.loop" @@ fun _sp ->
|
||||||
|
for _j = 2 to 5 do
|
||||||
|
incr n;
|
||||||
|
Trace.with_span ~__FILE__ ~__LINE__ "inner.loop" @@ fun _sp ->
|
||||||
|
Trace.messagef (fun k -> k "hello %d %d" _i _j);
|
||||||
|
Trace.message "world";
|
||||||
|
Trace.counter_int "n" !n
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
let () =
|
||||||
|
Trace_tef.with_setup ~out:(`File "trace.json") () @@ fun () ->
|
||||||
|
run ()
|
||||||
|
```
|
||||||
|
|
||||||
|
After running this, the file "trace.json" will contain something like:
|
||||||
|
```json
|
||||||
|
[{"pid":2,"name":"process_name","ph":"M","args": {"name":"main"}},
|
||||||
|
{"pid":2,"tid": 3,"name":"thread_name","ph":"M","args": {"name":"t1"}},
|
||||||
|
{"pid":2,"cat":"","tid": 3,"ts": 2.00,"name":"hello 1 2","ph":"I"},
|
||||||
|
{"pid":2,"cat":"","tid": 3,"ts": 3.00,"name":"world","ph":"I"},
|
||||||
|
{"pid":2,"tid":3,"ts":4.00,"name":"c","ph":"C","args": {"n":1}},
|
||||||
|
…
|
||||||
|
```
|
||||||
|
|
||||||
|
Opening it in https://ui.perfetto.dev we get something like this:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
### Backends
|
### Backends
|
||||||
|
|
||||||
Concrete tracing or observability formats such as:
|
Concrete tracing or observability formats such as:
|
||||||
|
|
|
||||||
BIN
media/ui.png
Normal file
BIN
media/ui.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 113 KiB |
Loading…
Add table
Reference in a new issue