From e4212b265e3dc1616f95ddf3efac5e161ecf3d70 Mon Sep 17 00:00:00 2001 From: Tristan Ancelet Date: Fri, 21 Aug 2026 10:22:39 -0500 Subject: [PATCH] updated --- src/logger.cr | 45 +++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/src/logger.cr b/src/logger.cr index e9f373e..24ff99f 100644 --- a/src/logger.cr +++ b/src/logger.cr @@ -5,7 +5,15 @@ module Logger annotation LogContext end - Log = ::Log + annotation LogMethod + end + + annotation LogConfig + end + + {% if @type && ! @type.has_constant?("Log") %} + Log = ::Log.for(self) + {% end %} {% verbatim do %} macro finished @@ -18,13 +26,28 @@ module Logger end macro log_with_context(level, message) - {% if @type.class? %} - {% if vars = @type.instance_vars.select(&.annotation(LogContext)) %} - Log.with_context( {% for var in vars %} {{var.name}}: @{{var.name}}, {% end %} ) do + {% if @def && @def.annotation(LogMethod) %} + {% anno = @def.annotation(LogMethod) %} + {% exclude = anno[:exclude].map(&.id) || [] of MacroId %} + {% args = @def.args.reject{|a| exclude.includes?(a.name)} %} + {% unless args.empty? %} + Log.with_context( {% for arg in args %} {{arg.name}}: {{arg.name}}, {% end %} ) do Log.{{level}} { [ generate_log_line, {{message}}].join(" : ") } end - {% else %} - Log.{{level}} { [ generate_log_line, {{message}}].join(" : ") } + {% else %} + Log.{{level}} { [ generate_log_line, {{message}}].join(" : ") } + {% end %} + {% elsif @type %} + {% if @type.class? %} + {% if vars = @type.instance_vars.select(&.annotation(LogContext)) %} + Log.with_context( {% for var in vars %} {{var.name}}: @{{var.name}}, {% end %} ) do + Log.{{level}} { [ generate_log_line, {{message}}].join(" : ") } + end + {% else %} + Log.{{level}} { [ generate_log_line, {{message}}].join(" : ") } + {% end %} + {% elsif @type.module? %} + Log.{{level}} { {{message}} } {% end %} {% else %} Log.{{level}} { [ generate_log_line, {{message}}].join(" : ") } @@ -33,14 +56,8 @@ module Logger macro generate_log_line {% verbatim do %} - {% if @type && @def %} - "{{(@type.module? ? "Module" : "Class").id}}({{@type.name}})" + " : " + "Method({{@def.name}})" - {% elsif @type %} - "{{(@type.module? ? "Module" : "Class").id}}({{@type.name}})" - {% elsif @def %} - "Method({{@def.name}})" - {% else %} - {{message}} + {% if @def %} + "Method({{@def.name}})" {% end %} {% end %} end