This commit is contained in:
Tristan Ancelet
2026-08-21 10:22:39 -05:00
parent 26e679a5d5
commit e4212b265e
+25 -8
View File
@@ -5,7 +5,15 @@ module Logger
annotation LogContext annotation LogContext
end end
Log = ::Log annotation LogMethod
end
annotation LogConfig
end
{% if @type && ! @type.has_constant?("Log") %}
Log = ::Log.for(self)
{% end %}
{% verbatim do %} {% verbatim do %}
macro finished macro finished
@@ -18,6 +26,18 @@ module Logger
end end
macro log_with_context(level, message) macro log_with_context(level, message)
{% 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(" : ") }
{% end %}
{% elsif @type %}
{% if @type.class? %} {% if @type.class? %}
{% if vars = @type.instance_vars.select(&.annotation(LogContext)) %} {% if vars = @type.instance_vars.select(&.annotation(LogContext)) %}
Log.with_context( {% for var in vars %} {{var.name}}: @{{var.name}}, {% end %} ) do Log.with_context( {% for var in vars %} {{var.name}}: @{{var.name}}, {% end %} ) do
@@ -26,6 +46,9 @@ module Logger
{% else %} {% else %}
Log.{{level}} { [ generate_log_line, {{message}}].join(" : ") } Log.{{level}} { [ generate_log_line, {{message}}].join(" : ") }
{% end %} {% end %}
{% elsif @type.module? %}
Log.{{level}} { {{message}} }
{% end %}
{% else %} {% else %}
Log.{{level}} { [ generate_log_line, {{message}}].join(" : ") } Log.{{level}} { [ generate_log_line, {{message}}].join(" : ") }
{% end %} {% end %}
@@ -33,14 +56,8 @@ module Logger
macro generate_log_line macro generate_log_line
{% verbatim do %} {% verbatim do %}
{% if @type && @def %} {% if @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}})" "Method({{@def.name}})"
{% else %}
{{message}}
{% end %} {% end %}
{% end %} {% end %}
end end