aboutsummaryrefslogtreecommitdiff
path: root/lib/std/log.zig
diff options
context:
space:
mode:
authorLee Cannon <leecannon@leecannon.xyz>2021-06-09 10:23:45 +0100
committerGitHub <noreply@github.com>2021-06-09 12:23:45 +0300
commit50822530d334336b6ca00424547e8c03ebb6e2df (patch)
treecac5f01523c37aeb84c13a8043447dfa8bb9c24d /lib/std/log.zig
parent5fa5fba3ce57b128b37b371eb3daa8ca39221613 (diff)
downloadzig-50822530d334336b6ca00424547e8c03ebb6e2df.tar.gz
zig-50822530d334336b6ca00424547e8c03ebb6e2df.zip
Provide method to set logging level per scope (#8584)
Diffstat (limited to 'lib/std/log.zig')
-rw-r--r--lib/std/log.zig19
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/std/log.zig b/lib/std/log.zig
index 215e611bc1..9d9271213b 100644
--- a/lib/std/log.zig
+++ b/lib/std/log.zig
@@ -117,13 +117,30 @@ pub const level: Level = if (@hasDecl(root, "log_level"))
else
default_level;
+pub const ScopeLevel = struct {
+ scope: @Type(.EnumLiteral),
+ level: Level,
+};
+
+const scope_levels = if (@hasDecl(root, "scope_levels"))
+ root.scope_levels
+else
+ [0]ScopeLevel{};
+
fn log(
comptime message_level: Level,
comptime scope: @Type(.EnumLiteral),
comptime format: []const u8,
args: anytype,
) void {
- if (@enumToInt(message_level) <= @enumToInt(level)) {
+ const effective_log_level = blk: {
+ inline for (scope_levels) |scope_level| {
+ if (scope_level.scope == scope) break :blk scope_level.level;
+ }
+ break :blk level;
+ };
+
+ if (@enumToInt(message_level) <= @enumToInt(effective_log_level)) {
if (@hasDecl(root, "log")) {
root.log(message_level, scope, format, args);
} else if (std.Target.current.os.tag == .freestanding) {