about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-06-17 08:54:37 +0000
committerEric Wong <normalperson@yhbt.net>2011-06-17 08:54:37 +0000
commit5f478f5a9a58f72c0a844258b8ee614bf24ea9f7 (patch)
tree4f54eeda882fa23e957e10a9484d07bca7cd9582
parentfa7ce0a6a755cb71a30417478fb797ee7b8d94b5 (diff)
downloadunicorn-5f478f5a9a58f72c0a844258b8ee614bf24ea9f7.tar.gz
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.
-rw-r--r--lib/unicorn.rb5
-rw-r--r--lib/unicorn/http_server.rb15
-rw-r--r--lib/unicorn/socket_helper.rb3
-rwxr-xr-xt/t0001-reload-bad-config.sh1
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" && {