diff --git a/spec/common_log_handler_spec.cr b/spec/common_log_handler_spec.cr new file mode 100644 index 0000000..840c79d --- /dev/null +++ b/spec/common_log_handler_spec.cr @@ -0,0 +1,22 @@ +require "./spec_helper" + +describe "Kemal::CommonLogHandler" do + it "logs to the given IO" do + config = Kemal.config + io = MemoryIO.new + logger = Kemal::CommonLogHandler.new io + logger.write "Something" + io.to_s.should eq "Something" + end + + it "creates log message for each request" do + request = HTTP::Request.new("GET", "/") + io = MemoryIO.new + context_io = MemoryIO.new + response = HTTP::Server::Response.new(context_io) + context = HTTP::Server::Context.new(request, response) + logger = Kemal::CommonLogHandler.new io + logger.call(context) + io.to_s.should_not be nil + end +end diff --git a/spec/logger_spec.cr b/spec/logger_spec.cr deleted file mode 100644 index 20726f4..0000000 --- a/spec/logger_spec.cr +++ /dev/null @@ -1,14 +0,0 @@ -require "./spec_helper" - -describe "Kemal::LogHandler" do - it "creates a handler" do - logger = Kemal::CommonLogHandler.new - logger.handler.should_not be nil - end - - it "creates a STDOUT handler by default" do - config = Kemal.config - logger = Kemal::CommonLogHandler.new - logger.handler.should be_a IO - end -end diff --git a/spec/spec_helper.cr b/spec/spec_helper.cr index 3b04ff8..bbef162 100644 --- a/spec/spec_helper.cr +++ b/spec/spec_helper.cr @@ -9,7 +9,13 @@ class CustomTestHandler < HTTP::Handler end end -class CustomLogHandler < Kemal::BaseLogHandler; end +class CustomLogHandler < Kemal::BaseLogHandler + def call(context) + end + + def write(message) + end +end def create_request_and_return_io(handler, request) io = MemoryIO.new diff --git a/src/kemal/base_log_handler.cr b/src/kemal/base_log_handler.cr index d13f29c..05be9d0 100644 --- a/src/kemal/base_log_handler.cr +++ b/src/kemal/base_log_handler.cr @@ -1,14 +1,7 @@ module Kemal # All loggers must inherit from `Kemal::BaseLogHandler`. - class Kemal::BaseLogHandler < HTTP::Handler - def initialize - end - - def call(context) - call_next context - end - - def write(message) - end + abstract class Kemal::BaseLogHandler < HTTP::Handler + abstract def call(context) + abstract def write(message) end end diff --git a/src/kemal/common_log_handler.cr b/src/kemal/common_log_handler.cr index 32fd097..016f844 100644 --- a/src/kemal/common_log_handler.cr +++ b/src/kemal/common_log_handler.cr @@ -1,10 +1,9 @@ module Kemal class CommonLogHandler < Kemal::BaseLogHandler - @handler : IO::FileDescriptor - getter handler + @handler : IO - def initialize - @handler = STDOUT + def initialize(io : IO) + @handler = io end def call(context) diff --git a/src/kemal/config.cr b/src/kemal/config.cr index 4583cf4..1e8bc6f 100644 --- a/src/kemal/config.cr +++ b/src/kemal/config.cr @@ -74,7 +74,7 @@ module Kemal private def setup_log_handler @logger ||= if @logging - Kemal::CommonLogHandler.new + Kemal::CommonLogHandler.new(STDOUT) else Kemal::NullLogHandler.new end diff --git a/src/kemal/null_log_handler.cr b/src/kemal/null_log_handler.cr index 0e4fb31..ca4d712 100644 --- a/src/kemal/null_log_handler.cr +++ b/src/kemal/null_log_handler.cr @@ -1,5 +1,10 @@ module Kemal # This is here to represent the logger corresponding to Null Object Pattern. class NullLogHandler < Kemal::BaseLogHandler + def call(context) + end + + def write(message) + end end end