aboutsummaryrefslogtreecommitdiffstats
path: root/actionview/lib/action_view/log_subscriber.rb
diff options
context:
space:
mode:
Diffstat (limited to 'actionview/lib/action_view/log_subscriber.rb')
-rw-r--r--actionview/lib/action_view/log_subscriber.rb44
1 files changed, 44 insertions, 0 deletions
diff --git a/actionview/lib/action_view/log_subscriber.rb b/actionview/lib/action_view/log_subscriber.rb
new file mode 100644
index 0000000000..6c8d9cb5bf
--- /dev/null
+++ b/actionview/lib/action_view/log_subscriber.rb
@@ -0,0 +1,44 @@
+require 'active_support/log_subscriber'
+
+module ActionView
+ # = Action View Log Subscriber
+ #
+ # Provides functionality so that Rails can output logs from Action View.
+ class LogSubscriber < ActiveSupport::LogSubscriber
+ VIEWS_PATTERN = /^app\/views\//
+
+ def initialize
+ @root = nil
+ super
+ end
+
+ def render_template(event)
+ return unless logger.info?
+ message = " Rendered #{from_rails_root(event.payload[:identifier])}"
+ message << " within #{from_rails_root(event.payload[:layout])}" if event.payload[:layout]
+ message << " (#{event.duration.round(1)}ms)"
+ info(message)
+ end
+ alias :render_partial :render_template
+ alias :render_collection :render_template
+
+ def logger
+ ActionView::Base.logger
+ end
+
+ protected
+
+ EMPTY = ''
+ def from_rails_root(string)
+ string = string.sub(rails_root, EMPTY)
+ string.sub!(VIEWS_PATTERN, EMPTY)
+ string
+ end
+
+ def rails_root
+ @root ||= "#{Rails.root}/"
+ end
+ end
+end
+
+ActionView::LogSubscriber.attach_to :action_view