kemal/src/kemal/log_handler.cr

26 lines
775 B
Crystal
Raw Normal View History

2016-07-17 11:43:13 +00:00
module Kemal
2017-10-06 11:53:53 +00:00
# Uses `STDOUT` by default and handles the logging of request/response process time.
class LogHandler < Kemal::BaseLogHandler
2017-10-05 16:31:47 +00:00
def initialize(@io : IO = STDOUT)
2016-07-17 11:43:13 +00:00
end
2015-10-27 19:01:36 +00:00
2017-08-25 13:41:02 +00:00
def call(context : HTTP::Server::Context)
2019-03-20 07:39:36 +00:00
elapsed_time = Time.measure { call_next(context) }
elapsed_text = elapsed_text(elapsed_time)
2019-06-04 19:59:05 +00:00
@io << Time.utc << ' ' << context.response.status_code << ' ' << context.request.method << ' ' << context.request.resource << ' ' << elapsed_text << '\n'
2016-07-17 11:43:13 +00:00
context
end
2015-11-16 21:55:02 +00:00
2017-08-24 20:32:43 +00:00
def write(message : String)
2017-10-05 16:31:47 +00:00
@io << message
2016-07-17 11:43:13 +00:00
end
2016-07-17 11:43:13 +00:00
private def elapsed_text(elapsed)
millis = elapsed.total_milliseconds
return "#{millis.round(2)}ms" if millis >= 1
2015-11-16 21:55:02 +00:00
2016-07-17 11:43:13 +00:00
"#{(millis * 1000).round(2)}µs"
end
2015-10-28 16:09:45 +00:00
end
2015-10-27 19:01:36 +00:00
end