1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
use fmt;
export type ctxtracer = struct {
tracer,
sink: *tracer,
fmt: str,
fields: []fmt::field,
};
export fn ctx(sink: *tracer, fmt: str, fields: fmt::field...) ctxtracer = {
return ctxtracer {
log = &ctx_log,
sink = sink,
fmt = fmt,
fields = fields,
};
};
fn ctx_log(
tr: *tracer,
ctx: nullable *context,
lvl: level,
fmt: str,
fields: fmt::field...
) void = {
const tr = tr: *ctxtracer;
const ctx_ = context {
fmt = tr.fmt,
fields = tr.fields,
next = ctx,
};
log(tr.sink, &ctx_, lvl, fmt, fields...);
};
|