From 5f478f5a9a58f72c0a844258b8ee614bf24ea9f7 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Fri, 17 Jun 2011 08:54:37 +0000 Subject: error logging is more consistent Backtraces are now formatted properly (with timestamps) and exceptions will be logged more consistently and similar to Logger defaults: "#{exc.message} (#{e.class})" backtrace.each { |line| ... } This may break some existing monitoring scripts, but errors will be more standardized and easier to check moving forward. --- lib/unicorn.rb | 5 +++++ lib/unicorn/http_server.rb | 15 +++++---------- lib/unicorn/socket_helper.rb | 3 +-- t/t0001-reload-bad-config.sh | 1 + 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/unicorn.rb b/lib/unicorn.rb index 9349e49..9a5eb6f 100644 --- a/lib/unicorn.rb +++ b/lib/unicorn.rb @@ -77,6 +77,11 @@ module Unicorn Unicorn::SocketHelper.sock_name(io) end end + + def self.log_error(logger, message, exc) + logger.error "#{message}: #{exc.message} (#{exc.class})" + exc.backtrace.each { |line| logger.error(line) } + end # :startdoc: end # :enddoc: diff --git a/lib/unicorn/http_server.rb b/lib/unicorn/http_server.rb index acb55f2..76d2590 100644 --- a/lib/unicorn/http_server.rb +++ b/lib/unicorn/http_server.rb @@ -305,8 +305,7 @@ class Unicorn::HttpServer end end rescue => e - logger.error "Unhandled master loop exception #{e.inspect}." - logger.error e.backtrace.join("\n") + Unicorn.log_error(@logger, "master loop error", e) end while true stop # gracefully shutdown all workers on our way out logger.info "master complete" @@ -505,8 +504,7 @@ class Unicorn::HttpServer when Unicorn::HttpParserError # try to tell the client they're bad Unicorn::Const::ERROR_400_RESPONSE else - logger.error "app error: #{e.inspect}" - logger.error e.backtrace.join("\n") + Unicorn.log_error(@logger, "app error", e) Unicorn::Const::ERROR_500_RESPONSE end client.kgio_trywrite(msg) @@ -606,10 +604,7 @@ class Unicorn::HttpServer rescue Errno::EBADF nr < 0 or return rescue => e - if worker - logger.error "Unhandled listen loop exception #{e.inspect}." - logger.error e.backtrace.join("\n") - end + Unicorn.log_error(@logger, "listen loop error", e) if worker end while worker end @@ -657,8 +652,8 @@ class Unicorn::HttpServer build_app! if preload_app logger.info "done reloading config_file=#{config.config_file}" rescue StandardError, LoadError, SyntaxError => e - logger.error "error reloading config_file=#{config.config_file}: " \ - "#{e.class} #{e.message} #{e.backtrace}" + Unicorn.log_error(@logger, + "error reloading config_file=#{config.config_file}", e) self.app = loaded_app end diff --git a/lib/unicorn/socket_helper.rb b/lib/unicorn/socket_helper.rb index 3519a7b..1d4e0f2 100644 --- a/lib/unicorn/socket_helper.rb +++ b/lib/unicorn/socket_helper.rb @@ -101,8 +101,7 @@ module Unicorn end sock.listen(opt[:backlog]) rescue => e - logger.error "error setting socket options: #{e.inspect}" - logger.error e.backtrace.join("\n") + Unicorn.log_error(logger, message, e) end def log_buffer_sizes(sock, pfx = '') diff --git a/t/t0001-reload-bad-config.sh b/t/t0001-reload-bad-config.sh index e1393ae..55bb355 100755 --- a/t/t0001-reload-bad-config.sh +++ b/t/t0001-reload-bad-config.sh @@ -34,6 +34,7 @@ t_begin "reload signal succeeds" && { done grep 'error reloading' $r_err >/dev/null + > $r_err } t_begin "hit with curl" && { -- cgit v1.2.3-24-ge0c7