aboutsummaryrefslogtreecommitdiff
path: root/lib/std/log.zig
diff options
context:
space:
mode:
Diffstat (limited to 'lib/std/log.zig')
-rw-r--r--lib/std/log.zig51
1 files changed, 32 insertions, 19 deletions
diff --git a/lib/std/log.zig b/lib/std/log.zig
index a20648626e..5cff132e44 100644
--- a/lib/std/log.zig
+++ b/lib/std/log.zig
@@ -145,30 +145,43 @@ fn log(
if (@typeInfo(@TypeOf(root.log)) != .Fn)
@compileError("Expected root.log to be a function");
root.log(message_level, scope, format, args);
- } else if (std.Target.current.os.tag == .freestanding) {
- // On freestanding one must provide a log function; we do not have
- // any I/O configured.
- return;
} else {
- const level_txt = switch (message_level) {
- .emerg => "emergency",
- .alert => "alert",
- .crit => "critical",
- .err => "error",
- .warn => "warning",
- .notice => "notice",
- .info => "info",
- .debug => "debug",
- };
- const prefix2 = if (scope == .default) ": " else "(" ++ @tagName(scope) ++ "): ";
- const stderr = std.io.getStdErr().writer();
- const held = std.debug.getStderrMutex().acquire();
- defer held.release();
- nosuspend stderr.print(level_txt ++ prefix2 ++ format ++ "\n", args) catch return;
+ defaultLog(message_level, scope, format, args);
}
}
}
+/// The default implementation for root.log. root.log may forward log messages
+/// to this function.
+pub fn defaultLog(
+ comptime message_level: Level,
+ comptime scope: @Type(.EnumLiteral),
+ comptime format: []const u8,
+ args: anytype,
+) void {
+ if (std.Target.current.os.tag == .freestanding) {
+ // On freestanding one must provide a log function; we do not have
+ // any I/O configured.
+ return;
+ }
+
+ const level_txt = switch (message_level) {
+ .emerg => "emergency",
+ .alert => "alert",
+ .crit => "critical",
+ .err => "error",
+ .warn => "warning",
+ .notice => "notice",
+ .info => "info",
+ .debug => "debug",
+ };
+ const prefix2 = if (scope == .default) ": " else "(" ++ @tagName(scope) ++ "): ";
+ const stderr = std.io.getStdErr().writer();
+ const held = std.debug.getStderrMutex().acquire();
+ defer held.release();
+ nosuspend stderr.print(level_txt ++ prefix2 ++ format ++ "\n", args) catch return;
+}
+
/// Returns a scoped logging namespace that logs all messages using the scope
/// provided here.
pub fn scoped(comptime scope: @Type(.EnumLiteral)) type {