Add support for log levels

This commit is contained in:
Omar Roth
2019-06-07 20:07:55 -05:00
parent 8c944815bc
commit 58995bb3a2
4 changed files with 60 additions and 19 deletions

View File

@@ -1,7 +1,14 @@
require "logger"
enum LogLevel
Debug
Info
Warn
Error
end
class Invidious::LogHandler < Kemal::BaseLogHandler
def initialize(@io : IO = STDOUT)
def initialize(@io : IO = STDOUT, @level = LogLevel::Warn)
end
def call(context : HTTP::Server::Context)
@@ -18,7 +25,15 @@ class Invidious::LogHandler < Kemal::BaseLogHandler
context
end
def write(message : String)
def puts(message : String)
@io << message << '\n'
if @io.is_a? File
@io.flush
end
end
def write(message : String, level = @level)
@io << message
if @io.is_a? File
@@ -26,6 +41,29 @@ class Invidious::LogHandler < Kemal::BaseLogHandler
end
end
def set_log_level(level : String)
case level.downcase
when "debug"
set_log_level(LogLevel::Debug)
when "info"
set_log_level(LogLevel::Info)
when "warn"
set_log_level(LogLevel::Warn)
when "error"
set_log_level(LogLevel::Error)
end
end
def set_log_level(level : LogLevel)
@level = level
end
{% for level in %w(debug info warn error) %}
def {{level.id}}(message : String)
puts(message, LogLevel::{{level.id.capitalize}})
end
{% end %}
private def elapsed_text(elapsed)
millis = elapsed.total_milliseconds
return "#{millis.round(2)}ms" if millis >= 1