Sha256: d6b12c3c2a0c0c8fbbb8cbcc7d1ff2c31eee46a17cc5bee9cab1a274d95d5570

Contents?: true

Size: 912 Bytes

Versions: 3

Compression:

Stored size: 912 Bytes

Contents

---
title: Rails日志实现探索(3)
layout: post
category: ruby
---


## 订阅者(接外包)的实现

### `ActiveSupport::Subscriber` 负责干活的订阅者

```ruby
def start(name, id, payload)
  e = ActiveSupport::Notifications::Event.new(name, Time.now, nil, id, payload)
  parent = event_stack.last
  parent << e if parent

  event_stack.push e
end

def finish(name, id, payload)
  finished  = Time.now
  event     = event_stack.pop
  event.end = finished
  event.payload.merge!(payload)

  method = name.split('.').first
  send(method, event)
end
```

## `ActiveSupport::LogSubscriber < ActiveSupport::Subscriber`

```ruby
def start(name, id, payload)
  super if logger
end

def finish(name, id, payload)
  super if logger
rescue Exception => e
  logger.error "Could not log #{name.inspect} event. #{e.class}: #{e.message} #{e.backtrace}"
end
```

这里的 logger 实际是 Rails.logger

## 

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rails_auth-1.0.6 test/dummy/node_modules/yougexiangfa_ui/_posts/ruby/2015-02-04-activesupport-notifications-3.md
rails_auth-1.0.5 test/dummy/node_modules/yougexiangfa_ui/_posts/ruby/2015-02-04-activesupport-notifications-3.md
rails_auth-1.0.4 test/dummy/node_modules/yougexiangfa_ui/_posts/ruby/2015-02-04-activesupport-notifications-3.md