summaryrefslogtreecommitdiff
path: root/trace/tee.ha
blob: 53bd9ea1ca47f4fa0706200f065085f1066c1ef8 (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
use fmt;

export type teetracer = struct {
	tracer,
	sinks: []*tracer,
};

export fn tee(sinks: *tracer...) teetracer = {
	return teetracer {
		log = &tee_log,
		sinks = sinks,
	};
};

export fn tee_log(
	tr: *tracer,
	ctx: nullable *context,
	lvl: level,
	fmt: str,
	fields: fmt::field...
) void = {
	const tr = tr: *teetracer;
	for (let i = 0z; i < len(tr.sinks); i += 1) {
		log(tr.sinks[i], ctx, lvl, fmt, fields...);
	};
};