diff options
author | Lassi Pulkkinen <lassi@pulk.fi> | 2024-10-31 03:11:21 +0200 |
---|---|---|
committer | Lassi Pulkkinen <lassi@pulk.fi> | 2024-10-31 03:51:35 +0200 |
commit | ae44478b30d890fe0fb04022f44d474dcdcc3f9d (patch) | |
tree | 5f462459ae4b47d22114eed717d1382d08cf4dfe /trace/trace.ha |
Diffstat (limited to 'trace/trace.ha')
-rw-r--r-- | trace/trace.ha | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/trace/trace.ha b/trace/trace.ha new file mode 100644 index 0000000..a096bd3 --- /dev/null +++ b/trace/trace.ha @@ -0,0 +1,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...); +}; |