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