Class: RailsSemanticLogger::ActionView::LogSubscriber

Inherits:
ActiveSupport::LogSubscriber
  • Object
show all
Defined in:
lib/rails_semantic_logger/action_view/log_subscriber.rb

Overview

Output Semantic logs from Action View.

Defined Under Namespace

Classes: Start

Constant Summary collapse

VIEWS_PATTERN =
%r{^app/views/}

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeLogSubscriber

Returns a new instance of LogSubscriber.



26
27
28
29
# File 'lib/rails_semantic_logger/action_view/log_subscriber.rb', line 26

def initialize
  @rails_root = nil
  super
end

Class Attribute Details

.loggerObject (readonly)

Returns the value of attribute logger.



22
23
24
# File 'lib/rails_semantic_logger/action_view/log_subscriber.rb', line 22

def logger
  @logger
end

.rendered_log_levelObject

Returns the value of attribute rendered_log_level.



23
24
25
# File 'lib/rails_semantic_logger/action_view/log_subscriber.rb', line 23

def rendered_log_level
  @rendered_log_level
end

Class Method Details

.attach_toObject



153
154
155
156
157
158
159
160
161
162
# File 'lib/rails_semantic_logger/action_view/log_subscriber.rb', line 153

def self.attach_to(*)
  ActiveSupport::Notifications.unsubscribe("render_template.action_view")
  ActiveSupport::Notifications.unsubscribe("render_layout.action_view")
  ActiveSupport::Notifications.subscribe("render_template.action_view",
                                         RailsSemanticLogger::ActionView::LogSubscriber::Start.new)
  ActiveSupport::Notifications.subscribe("render_layout.action_view",
                                         RailsSemanticLogger::ActionView::LogSubscriber::Start.new)

  super
end

Instance Method Details

#render_collection(event) ⇒ Object



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/rails_semantic_logger/action_view/log_subscriber.rb', line 88

def render_collection(event)
  return unless should_log?

  identifier = event.payload[:identifier] || "templates"

  payload = {
    template: from_rails_root(identifier),
    count:    event.payload[:count]
  }
  payload[:cache_hits]  = event.payload[:cache_hits] if event.payload[:cache_hits]
  payload[:allocations] = event.allocations
  payload[:gc_time]     = event.gc_time.round(2) if event.respond_to?(:gc_time)

  logger.measure(
    self.class.rendered_log_level,
    "Rendered",
    payload:  payload,
    duration: event.duration,
    metric:   "rails.view.render.collection"
  )
end

#render_layout(event) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/rails_semantic_logger/action_view/log_subscriber.rb', line 70

def render_layout(event)
  return unless should_log?

  payload = {
    template: from_rails_root(event.payload[:identifier])
  }
  payload[:allocations] = event.allocations
  payload[:gc_time]     = event.gc_time.round(2) if event.respond_to?(:gc_time)

  logger.measure(
    self.class.rendered_log_level,
    "Rendered layout",
    payload:  payload,
    duration: event.duration,
    metric:   "rails.view.render.layout"
  )
end

#render_partial(event) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/rails_semantic_logger/action_view/log_subscriber.rb', line 50

def render_partial(event)
  return unless should_log?

  payload = {
    partial: from_rails_root(event.payload[:identifier])
  }
  payload[:within]      = from_rails_root(event.payload[:layout]) if event.payload[:layout]
  payload[:cache]       = event.payload[:cache_hit] unless event.payload[:cache_hit].nil?
  payload[:allocations] = event.allocations
  payload[:gc_time]     = event.gc_time.round(2) if event.respond_to?(:gc_time)

  logger.measure(
    self.class.rendered_log_level,
    "Rendered",
    payload:  payload,
    duration: event.duration,
    metric:   "rails.view.render.partial"
  )
end

#render_template(event) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/rails_semantic_logger/action_view/log_subscriber.rb', line 31

def render_template(event)
  return unless should_log?

  payload = {
    template: from_rails_root(event.payload[:identifier])
  }
  payload[:within]      = from_rails_root(event.payload[:layout]) if event.payload[:layout]
  payload[:allocations] = event.allocations
  payload[:gc_time]     = event.gc_time.round(2) if event.respond_to?(:gc_time)

  logger.measure(
    self.class.rendered_log_level,
    "Rendered",
    payload:  payload,
    duration: event.duration,
    metric:   "rails.view.render.template"
  )
end

#start(name, id, payload) ⇒ Object



110
111
112
113
114
115
116
117
118
119
120
# File 'lib/rails_semantic_logger/action_view/log_subscriber.rb', line 110

def start(name, id, payload)
  if ["render_template.action_view", "render_layout.action_view"].include?(name) && should_log?
    qualifier        = " layout" if name == "render_layout.action_view"
    payload          = {template: from_rails_root(payload[:identifier])}
    payload[:within] = from_rails_root(payload[:layout]) if payload[:layout]

    logger.send(self.class.rendered_log_level, message: "Rendering#{qualifier}", payload: payload)
  end

  super
end