]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2932 log exception stacktrace
authorsimonbrandhof <simon.brandhof@gmail.com>
Sun, 30 Oct 2011 20:50:34 +0000 (21:50 +0100)
committersimonbrandhof <simon.brandhof@gmail.com>
Sun, 30 Oct 2011 20:50:34 +0000 (21:50 +0100)
sonar-server/src/main/java/org/sonar/server/ui/JRubyFacade.java
sonar-server/src/main/webapp/WEB-INF/app/controllers/application_controller.rb
sonar-server/src/main/webapp/WEB-INF/app/models/api/utils.rb

index 7e01bb368d277ad3b43c4b957d65b63ed93694e4..0b80ed0cb5ed08401fbf8ba27eef71e0f3d917cd 100644 (file)
@@ -369,6 +369,10 @@ public final class JRubyFacade {
     return i18n.getJsDictionnary(rubyLocale);
   }
 
+  public void logError(String message) {
+    LoggerFactory.getLogger(getClass()).error(message);
+  }
+
   public ReviewsNotificationManager getReviewsNotificationManager() {
     return getContainer().getComponentByType(ReviewsNotificationManager.class);
   }
index 5deb4851b676867fcd1ab07fa7025a0b9867e189..c799f91a95b3298adf86a2bab989085dc237dd7e 100644 (file)
@@ -138,7 +138,9 @@ class ApplicationController < ActionController::Base
   end
 
   def render_error(error)
-    logger.error("Fail to render: #{request.url}", error)
+    # Ruby on Rails has a single logger "rails", so it's not possible to distinguish profiling logs
+    # from error logs. For this reason a standard SLF4J logger is used instead of logger.error().
+    java_facade.logError("Fail to render: #{request.url}\n#{Api::Utils.exception_message(error)}")
     render :file => "#{Rails.public_path}/500.html", :status => 500
   end
 
index 9e213019a6c34cea32529684720d844b9be59c09..87ca9d867158b45350c5dd6c091ecfb7a11802d8 100644 (file)
@@ -66,4 +66,12 @@ class Api::Utils
     params = options[:params]||[]
     Java::OrgSonarServerUi::JRubyFacade.getInstance().getMessage(I18n.locale, key, default, params.to_java)
   end
+
+  def self.exception_message(exception)
+    result = (exception.respond_to?(:message) ? "#{exception.message}\n" : "#{message}\n")
+    if exception.respond_to? :backtrace
+      result << "\t" + exception.backtrace.join("\n\t") + "\n"
+    end
+    result
+  end
 end