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...);
};
|