diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-11-11 10:34:59 +0100 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-11-11 10:34:59 +0100 |
| commit | 402888423de9764c22175df4cc41d79157895f3d (patch) | |
| tree | b954cac6454bb00ed39cc87ffc3d23c8da948ef4 /src/log.zig | |
| parent | ce06aafe385f217bb0756089a88255f31f093018 (diff) | |
add basic server
Diffstat (limited to 'src/log.zig')
| -rw-r--r-- | src/log.zig | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/log.zig b/src/log.zig new file mode 100644 index 0000000..9d2b444 --- /dev/null +++ b/src/log.zig @@ -0,0 +1,56 @@ +const std = @import("std"); + +const ansi = @import("ansi.zig"); + +var log_buffer: [1024]u8 = undefined; +var writer_stderr = std.fs.File.stderr().writer(&log_buffer); +const stderr = &writer_stderr.interface; +var log_lock = std.Thread.Mutex{}; + +pub fn handler( + comptime message_level: std.log.Level, + comptime scope: @TypeOf(.enum_literal), + comptime format: []const u8, + args: anytype, +) void { + log_lock.lock(); + defer log_lock.unlock(); + defer stderr.flush() catch unreachable; + + const color = switch (message_level) { + .err => .red, + .warn => .yellow, + .info => .blue, + .debug => .magenta, + }; + + stderr.print( + "{f}{f}", + .{ + ansi.ClearLine {}, + ansi.Styled { + .text = " " ++ (comptime message_level.asText()) ++ " ", + .bg = color, + .bold = true, + }, + }, + ) catch unreachable; + + if (scope != .default) { + stderr.print( + "{f}", + .{ + ansi.Styled { + .text = " " ++ @tagName(scope) ++ " ", + .bg = .gray, + .fg = .black, + .italic = true, + }, + }, + ) catch unreachable; + } + + stderr.writeByte(' ') catch unreachable; + stderr.print(format, args) catch unreachable; + stderr.writeAll("\n") catch unreachable; +} |