pluto/src/kernel/log.zig

50 lines
1.4 KiB
Zig
Raw Normal View History

2019-06-22 10:00:57 +01:00
const serial = @import("serial.zig");
const fmt = @import("std").fmt;
pub const Level = enum {
INFO,
DEBUG,
WARNING,
ERROR,
2019-06-22 10:00:57 +01:00
};
fn logCallback(context: void, str: []const u8) anyerror!void {
2019-10-08 00:11:50 +01:00
serial.writeBytes(str, serial.Port.COM1);
2019-06-22 10:00:57 +01:00
}
pub fn log(comptime level: Level, comptime format: []const u8, args: ...) void {
fmt.format({}, anyerror, logCallback, "[" ++ @tagName(level) ++ "] " ++ format, args) catch unreachable;
}
pub fn logInfo(comptime format: []const u8, args: ...) void {
log(Level.INFO, format, args);
}
pub fn logDebug(comptime format: []const u8, args: ...) void {
log(Level.DEBUG, format, args);
}
2019-06-22 10:00:57 +01:00
pub fn logWarning(comptime format: []const u8, args: ...) void {
log(Level.WARNING, format, args);
}
2019-06-22 10:00:57 +01:00
pub fn logError(comptime format: []const u8, args: ...) void {
log(Level.ERROR, format, args);
}
2019-10-08 11:20:37 +01:00
pub fn runtimeTests() void {
inline for (@typeInfo(Level).Enum.fields) |field| {
const level = @field(Level, field.name);
log(level, "Test " ++ field.name ++ " level\n");
2019-11-10 12:35:08 +00:00
log(level, "Test " ++ field.name ++ " level with args {}, {}\n", "a", @as(u32, 1));
2019-10-08 11:20:37 +01:00
const logFn = switch (level) {
.INFO => logInfo,
.DEBUG => logDebug,
.WARNING => logWarning,
.ERROR => logError,
};
logFn("Test " ++ field.name ++ " function\n");
2019-11-10 12:35:08 +00:00
logFn("Test " ++ field.name ++ " function with args {}, {}\n", "a", @as(u32, 1));
2019-10-08 11:20:37 +01:00
}
}