diff options
author | 2022-06-27 05:30:07 -0700 | |
---|---|---|
committer | 2022-06-27 05:30:07 -0700 | |
commit | 3059d0fbb32fe9e8bed470d4fd3436a95b1dbd29 (patch) | |
tree | cdeaad2225af264d9afd10c4a7abc23bec2bc0d3 /src | |
parent | dc3a1170d4c5cec9b45841354bd8a1ca898aa92f (diff) | |
download | bun-3059d0fbb32fe9e8bed470d4fd3436a95b1dbd29.tar.gz bun-3059d0fbb32fe9e8bed470d4fd3436a95b1dbd29.tar.zst bun-3059d0fbb32fe9e8bed470d4fd3436a95b1dbd29.zip |
Add scoped logger functions for debug builds
Diffstat (limited to 'src')
-rw-r--r-- | src/output.zig | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/output.zig b/src/output.zig index a82b28f2f..4712c97f1 100644 --- a/src/output.zig +++ b/src/output.zig @@ -339,6 +339,47 @@ pub fn print(comptime fmt: string, args: anytype) void { } } +/// Debug-only logs which should not appear in release mode +const _log_fn = fn (comptime fmt: string, args: anytype) callconv(.Inline) void; +pub fn scoped(comptime tag: @Type(.EnumLiteral), comptime disabled: bool) _log_fn { + const disable = comptime !Environment.isDebug or disabled; + + if (comptime disable) { + return struct { + pub inline fn log(comptime _: string, _: anytype) void {} + }.log; + } + + return struct { + const BufferedWriter = Source.BufferedStream; + var buffered_writer: BufferedWriter = undefined; + var out: BufferedWriter.Writer = undefined; + var out_set = false; + /// Debug-only logs which should not appear in release mode + pub inline fn log(comptime fmt: string, args: anytype) void { + if (!out_set) { + buffered_writer = .{ + .unbuffered_writer = writer(), + }; + out = buffered_writer.writer(); + out_set = true; + } + + if (comptime fmt[fmt.len - 1] != '\n') { + return log(fmt ++ "\n", args); + } + + if (Output.enable_ansi_colors_stderr) { + out.print(comptime prettyFmt("<r><d>[" ++ @tagName(tag) ++ "]<r> " ++ fmt, true), args) catch unreachable; + buffered_writer.flush() catch unreachable; + } else { + out.print(comptime prettyFmt("<r><d>[" ++ @tagName(tag) ++ "]<r> " ++ fmt, false), args) catch unreachable; + buffered_writer.flush() catch unreachable; + } + } + }.log; +} + // Valid colors: // <black> // <blue> |