aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-27 05:30:07 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-06-27 05:30:07 -0700
commit3059d0fbb32fe9e8bed470d4fd3436a95b1dbd29 (patch)
treecdeaad2225af264d9afd10c4a7abc23bec2bc0d3 /src
parentdc3a1170d4c5cec9b45841354bd8a1ca898aa92f (diff)
downloadbun-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.zig41
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>