Files
Mango/src/logger.cr
2020-02-17 00:33:43 +00:00

60 lines
1.1 KiB
Crystal

require "./config"
require "logger"
require "colorize"
LEVELS = ["debug", "error", "fatal", "info", "warn"]
COLORS = [:light_cyan, :light_red, :red, :light_yellow, :light_magenta]
class MLogger
def initialize(config : Config)
@logger = Logger.new STDOUT
@log_off = false
log_level = config.log_level
if log_level == "off"
@log_off = true
return
end
{% begin %}
case log_level
{% for lvl in LEVELS %}
when {{lvl}}
@logger.level = Logger::{{lvl.upcase.id}}
{% end %}
else
raise "Unknown log level #{log_level}"
end
{% end %}
@logger.formatter = Logger::Formatter.new do \
|severity, datetime, progname, message, io|
color = :default
{% begin %}
case severity.to_s().downcase
{% for lvl, i in LEVELS %}
when {{lvl}}
color = COLORS[{{i}}]
{% end %}
end
{% end %}
io << "[#{severity}]".ljust(8).colorize(color)
io << datetime.to_s("%Y/%m/%d %H:%M:%S") << " | "
io << message
end
end
{% for lvl in LEVELS %}
def {{lvl.id}}(msg)
return if @log_off
@logger.{{lvl.id}} msg
end
{% end %}
def to_json(json : JSON::Builder)
json.string self
end
end