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