From ece4a2b6fbae88412340f910f713ef32e5da06e5 Mon Sep 17 00:00:00 2001 From: m0tholith <48518572+m0tholith@users.noreply.github.com> Date: Fri, 26 Sep 2025 17:58:29 +0300 Subject: [PATCH] Make StderrLogger print file and line if `FULL_LOG` (#2500) * Make StderrLogger print file and line if `FULL_LOG` * Avoid inlining a lot of code by using a macro wrapper. Fix test. --------- Co-authored-by: Christoffer Lerno --- lib/std/core/logging.c3 | 21 +++++++++++++++------ test/test_suite/stdlib/logging.c3t | 22 +++++++++++++++------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/lib/std/core/logging.c3 b/lib/std/core/logging.c3 index f6ef28dea..abaa1cd97 100644 --- a/lib/std/core/logging.c3 +++ b/lib/std/core/logging.c3 @@ -134,7 +134,16 @@ macro void init() log_init.call(fn () => (void)logger_mutex.init()); } -fn void call_log(LogPriority prio, LogCategory category, String fmt, args...) +macro void call_log(LogPriority prio, LogCategory category, String fmt, args...) +{ + $if FULL_LOG: + call_log_internal(prio, category, $$FILE, $$FUNC, $$LINE, fmt, args); + $else + call_log_internal(prio, category, "", "", 0, fmt, args); + $endif +} + +fn void call_log_internal(LogPriority prio, LogCategory category, String file, String func, int line, String fmt, any[] args) { LogPriority priority = mem::@atomic_load(config_priorities[category], UNORDERED); if (priority > prio) return; @@ -143,11 +152,7 @@ fn void call_log(LogPriority prio, LogCategory category, String fmt, args...) Logger logger = current_logger; LogFn logfn = current_logfn; defer if (locked) (void)logger_mutex.unlock(); - $if FULL_LOG: - logfn(logger.ptr, prio, category, current_tag, $$FILE, $$FUNC, $$LINE, fmt, args); - $else - logfn(logger.ptr, prio, category, current_tag, "", "", 0, fmt, args); - $endif + logfn(logger.ptr, prio, category, current_tag, file, func, line, fmt, args); } fn String? get_category_name(LogCategory category) @@ -199,7 +204,11 @@ fn void StderrLogger.log(&self, LogPriority priority, LogCategory category, LogT str.init(mem, 256); str.appendf(fmt, ...args); TzDateTime time = datetime::now().to_local(); + $if FULL_LOG: + io::eprintfn("[%02d:%02d:%02d:%04d] %s:%d [%s] %s", time.hour, time.min, time.sec, (time.usec / 1000), file, line, priority, str); + $else io::eprintfn("[%02d:%02d:%02d:%04d] [%s] %s", time.hour, time.min, time.sec, (time.usec / 1000), priority, str); + $endif }; } diff --git a/test/test_suite/stdlib/logging.c3t b/test/test_suite/stdlib/logging.c3t index 5e86048ea..fefcdee00 100644 --- a/test/test_suite/stdlib/logging.c3t +++ b/test/test_suite/stdlib/logging.c3t @@ -22,6 +22,9 @@ entry: %result = alloca [12 x i8], align 1 %tempcoerce = alloca { i64, i32 }, align 8 %category = alloca i8, align 1 + %category2 = alloca i8, align 1 + %indirectarg = alloca %"char[]", align 8 + %indirectarg3 = alloca %"any[]", align 8 %0 = call ptr @llvm.threadlocal.address.p0(ptr @std.core.log.default_category) %1 = load i8, ptr %0, align 1 store i8 %1, ptr %old, align 1 @@ -40,15 +43,20 @@ entry: %7 = load i8, ptr %6, align 1 store i8 %7, ptr %category, align 1 %8 = load i8, ptr %category, align 1 - call void @std.core.log.call_log(i32 2, i8 zeroext %8, ptr @.str.1, i64 5, ptr null, i64 0) - %9 = call ptr @llvm.threadlocal.address.p0(ptr @std.core.log.current_tag) - call void @llvm.memcpy.p0.p0.i32(ptr align 1 %9, ptr align 1 %old1, i32 12, i1 false) - %10 = call ptr @llvm.threadlocal.address.p0(ptr @std.core.log.default_category) - %11 = load i8, ptr %old, align 1 - store i8 %11, ptr %10, align 1 + store i8 %8, ptr %category2, align 1 + %9 = load i8, ptr %category2, align 1 + store %"char[]" { ptr @.str.1, i64 5 }, ptr %indirectarg, align 8 + store %"any[]" zeroinitializer, ptr %indirectarg3, align 8 + call void @std.core.log.call_log_internal(i32 2, i8 zeroext %9, ptr @.emptystr, i64 0, ptr @.emptystr, i64 0, i32 0, ptr byval(%"char[]") align 8 %indirectarg, ptr byval(%"any[]") align 8 %indirectarg3) + %10 = call ptr @llvm.threadlocal.address.p0(ptr @std.core.log.current_tag) + call void @llvm.memcpy.p0.p0.i32(ptr align 1 %10, ptr align 1 %old1, i32 12, i1 false) + %11 = call ptr @llvm.threadlocal.address.p0(ptr @std.core.log.default_category) + %12 = load i8, ptr %old, align 1 + store i8 %12, ptr %11, align 1 ret void } declare extern_weak { i64, i32 } @std.core.log.create_tag(ptr, i64) #0 -declare extern_weak void @std.core.log.call_log(i32, i8 zeroext, ptr, i64, ptr, i64) #0 +declare extern_weak void @std.core.log.call_log_internal(i32, i8 zeroext, ptr, i64, ptr, i64, i32, ptr byval(%"char[]") align 8, ptr byval(%"any[]") align 8) #0 +