summaryrefslogtreecommitdiff
path: root/trace/ctx.ha
blob: 26a1ce6aa52d3cd46a879dada5df6127c98478ad (plain)
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...);
};