diff --git a/src/logger.cr b/src/logger.cr index 224f5aa..2b35db5 100644 --- a/src/logger.cr +++ b/src/logger.cr @@ -3,22 +3,6 @@ require "colorize" 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 end @@ -30,6 +14,10 @@ module Logger def initialize(@value : Int32, @color : Symbol) end + def to_s + LOG_LEVELS.keys[@value].to_s.downcase + end + {% for op, i in %w[ < > == <= >= ] %} def {{op.id}} (other : LOG_LEVEL) @value {{op.id}} other.value @@ -38,49 +26,39 @@ module Logger end LOG_LEVELS = { - DEBUG: LOG_LEVEL.new(value: 0, color: :green), - INFO: LOG_LEVEL.new(value: 1, color: :blue), - WARN: LOG_LEVEL.new(value: 2, color: :yellow), - ERROR: LOG_LEVEL.new(value: 3, color: :red), - FATAL: LOG_LEVEL.new(value: 4, color: :red) + "DEBUG" => LOG_LEVEL.new(value: 0, color: :green), + "INFO" => LOG_LEVEL.new(value: 1, color: :blue), + "WARN" => LOG_LEVEL.new(value: 2, color: :yellow), + "ERROR" => LOG_LEVEL.new(value: 3, color: :red), + "FATAL" => LOG_LEVEL.new(value: 4, color: :red) } - @@min_level : LOG_LEVEL = LOG_LEVELS[:INFO] - @@max_level : LOG_LEVEL = LOG_LEVELS[:FATAL] + @@min_level : LOG_LEVEL = LOG_LEVELS["INFO"] + @@max_level : LOG_LEVEL = LOG_LEVELS["FATAL"] @@debug : Bool = false LOG_MUTEX = ::Mutex.new - macro generate_log_line(message) - {% _def = @def %} - {% _class = @type %} - {% _type = @type.module? ? "Module" : "Class" %} - {% if _class && _class.name.stringify != "Logger" && _def %} - "{{_type.id}}({{_class.name.id}})" + " : " + "Method({{_def.name}})" + " : " + {{message}} - {% elsif _class && _class.name.stringify != "Logger" %} - "{{_type.id}}({{_class.name.id}})" + " : " + {{message}} - {% elsif _def %} - "Method({{_def.name}})" + " : " + {{message}} + macro generate_log_line + {% verbatim do %} + {% if @type && @def %} + "{{(@type.module? ? "Module" : "Class").id}}({{@type.name.id}})" + " : " + "Method({{@def.name}})" + " : " + {% elsif @type %} + "{{(@type.module? ? "Module" : "Class").id}}({{@type.name.id}})" + " : " + {% elsif @def %} + "Method({{@def.name}})" + " : " {% else %} {{message}} {% end %} + {% end %} end {% for level in LOG_LEVELS.keys %} - macro {{level.downcase}}(message) - ::Logger.log {{level.symbolize}}, Logger.generate_log_line(\{{message}}) + macro {{level.downcase.id}}(message) + ::Logger.log {{level}}, Logger.generate_log_line + \{{message}} 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 : -> ) LOG_MUTEX.synchronize do yield @@ -93,6 +71,19 @@ module Logger 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 level.in?(@@min_level.value..@@max_level.value) end @@ -104,7 +95,7 @@ module Logger Logger.debug "Debug set to #{state}" end - def self.log(level : Symbol, message : String) + def self.log(level : String, message : String) _level = LOG_LEVELS[level] if valid?(_level) || debug? synchronize {