summaryrefslogtreecommitdiff
path: root/trace/trace.ha
blob: a096bd359f6e48b172928c66238fea15b9dbba93 (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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
use fmt;

export type failed = !void;

export type level = enum u8 {
	ERROR,
	WARN,
	INFO,
	DEBUG,
	TRACE,
};

export type context = struct {
	fmt: str,
	fields: []fmt::field,
	next: nullable *context,
};

export type tracer = struct {
	log: *logfunc,
};

export type logfunc = fn(
	tr: *tracer,
	ctx: nullable *context,
	lvl: level,
	fmt: str,
	fields: fmt::field...
) void;

export fn log(
	tr: *tracer,
	ctx: nullable *context,
	lvl: level,
	fmt: str,
	fields: fmt::field...
) void = {
	tr.log(tr, ctx, lvl, fmt, fields...);
};

export fn error(tr: *tracer, fmt: str, fields: fmt::field...) failed = {
	log(tr, null, level::ERROR, fmt, fields...);
	return failed;
};

export fn warn(tr :*tracer, fmt: str, fields: fmt::field...) void = {
	log(tr, null, level::WARN, fmt, fields...);
};

export fn info(tr: *tracer, fmt: str, fields: fmt::field...) void = {
	log(tr, null, level::INFO, fmt, fields...);
};

export fn debug(tr: *tracer, fmt: str, fields: fmt::field...) void = {
	log(tr, null, level::DEBUG, fmt, fields...);
};

export fn trace(tr: *tracer, fmt: str, fields: fmt::field...) void = {
	log(tr, null, level::TRACE, fmt, fields...);
};