This commit is contained in:
Tristan Ancelet
2026-08-21 10:22:39 -05:00
parent 26e679a5d5
commit e4212b265e
+30 -13
View File
@@ -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 %}
{% if @def %}
"Method({{@def.name}})"
{% else %}
{{message}}
{% end %}
{% end %}
end