adding changes

This commit is contained in:
Tristan Ancelet
2026-03-20 19:03:52 -05:00
parent b427baa689
commit c427eff500

View File

@@ -3,22 +3,6 @@ require "colorize"
module Logger module Logger
macro finished
{% if @top_level.has_constant?("CliGen") %}
{% levels = LOG_LEVELS.map{|level| [level.stringify.downcase,level.symbolize]} %}
{% for level in %w[ max min ].map &.id %}
CliGen.add_default_flag(long: "--{{level}} {{level.upcase}}", description: "Configure the {{level}}imum log level (default is: #{@@{{level}}_level})"){|level|
levels = {{levels}}.to_h
abort "ERROR : --{{level}}_level : Level(#{level}) is not valid. (valid: #{levels.keys.join(", ")})" unless levels.has_key?(level)
@@{{level}}_level = LOG_LEVELS[levels[level]]
}
{% end %}
CliGen.add_default_flag(short: "-d", long: "--debug", description: "Tell the logger that we should enable full debug logging"){
Logger.debug = true
}
{% end %}
end
annotation LoggerWatcher annotation LoggerWatcher
end end
@@ -30,6 +14,10 @@ module Logger
def initialize(@value : Int32, @color : Symbol) def initialize(@value : Int32, @color : Symbol)
end end
def to_s
LOG_LEVELS.keys[@value].to_s.downcase
end
{% for op, i in %w[ < > == <= >= ] %} {% for op, i in %w[ < > == <= >= ] %}
def {{op.id}} (other : LOG_LEVEL) def {{op.id}} (other : LOG_LEVEL)
@value {{op.id}} other.value @value {{op.id}} other.value
@@ -38,49 +26,39 @@ module Logger
end end
LOG_LEVELS = { LOG_LEVELS = {
DEBUG: LOG_LEVEL.new(value: 0, color: :green), "DEBUG" => LOG_LEVEL.new(value: 0, color: :green),
INFO: LOG_LEVEL.new(value: 1, color: :blue), "INFO" => LOG_LEVEL.new(value: 1, color: :blue),
WARN: LOG_LEVEL.new(value: 2, color: :yellow), "WARN" => LOG_LEVEL.new(value: 2, color: :yellow),
ERROR: LOG_LEVEL.new(value: 3, color: :red), "ERROR" => LOG_LEVEL.new(value: 3, color: :red),
FATAL: LOG_LEVEL.new(value: 4, color: :red) "FATAL" => LOG_LEVEL.new(value: 4, color: :red)
} }
@@min_level : LOG_LEVEL = LOG_LEVELS[:INFO] @@min_level : LOG_LEVEL = LOG_LEVELS["INFO"]
@@max_level : LOG_LEVEL = LOG_LEVELS[:FATAL] @@max_level : LOG_LEVEL = LOG_LEVELS["FATAL"]
@@debug : Bool = false @@debug : Bool = false
LOG_MUTEX = ::Mutex.new LOG_MUTEX = ::Mutex.new
macro generate_log_line(message) macro generate_log_line
{% _def = @def %} {% verbatim do %}
{% _class = @type %} {% if @type && @def %}
{% _type = @type.module? ? "Module" : "Class" %} "{{(@type.module? ? "Module" : "Class").id}}({{@type.name.id}})" + " : " + "Method({{@def.name}})" + " : "
{% if _class && _class.name.stringify != "Logger" && _def %} {% elsif @type %}
"{{_type.id}}({{_class.name.id}})" + " : " + "Method({{_def.name}})" + " : " + {{message}} "{{(@type.module? ? "Module" : "Class").id}}({{@type.name.id}})" + " : "
{% elsif _class && _class.name.stringify != "Logger" %} {% elsif @def %}
"{{_type.id}}({{_class.name.id}})" + " : " + {{message}} "Method({{@def.name}})" + " : "
{% elsif _def %}
"Method({{_def.name}})" + " : " + {{message}}
{% else %} {% else %}
{{message}} {{message}}
{% end %} {% end %}
{% end %}
end end
{% for level in LOG_LEVELS.keys %} {% for level in LOG_LEVELS.keys %}
macro {{level.downcase}}(message) macro {{level.downcase.id}}(message)
::Logger.log {{level.symbolize}}, Logger.generate_log_line(\{{message}}) ::Logger.log {{level}}, Logger.generate_log_line + \{{message}}
end end
{% end %} {% end %}
{% for level, i in %w[ min max ] %}
def self.{{level.id}}=(level : Symbol)
synchronize {
@@{{level.id}}_level = LOG_LEVELS[level] if LOG_LEVELS.keys.includes? level
}
Logger.debug "Logger : {{level.id}}= : Minimum log level set to #{level}"
end
{% end %}
protected def self.synchronize(&block : -> ) protected def self.synchronize(&block : -> )
LOG_MUTEX.synchronize do LOG_MUTEX.synchronize do
yield yield
@@ -93,6 +71,19 @@ module Logger
end end
end end
{% for level in %w[ min max ] %}
def self.{{level.id}}=(selection : String) : Nil
Logger.debug "Entering with #{selection}"
raise "ERROR : {{level.id}}= : Invalid level" unless _level = LOG_LEVELS[selection.upcase]
synchronize {
@@{{level.id}}_level = _level
}
end
def self.{{level.id}} : String
@@{{level.id}}_level.to_s.downcase
end
{% end %}
def self.valid?(level : LOG_LEVEL) : Bool def self.valid?(level : LOG_LEVEL) : Bool
level.in?(@@min_level.value..@@max_level.value) level.in?(@@min_level.value..@@max_level.value)
end end
@@ -104,7 +95,7 @@ module Logger
Logger.debug "Debug set to #{state}" Logger.debug "Debug set to #{state}"
end end
def self.log(level : Symbol, message : String) def self.log(level : String, message : String)
_level = LOG_LEVELS[level] _level = LOG_LEVELS[level]
if valid?(_level) || debug? if valid?(_level) || debug?
synchronize { synchronize {