Unsubscribe all Rails built-in subscribers#386
Conversation
Fixes roidrage#385 Assumes that a built-in subscriber is nested under the component namespace, so under ActionView or ActionController.
| end.to change { | ||
| Lograge.notification_listeners_for('render_template.action_view') | ||
| } | ||
| }.to([]) |
There was a problem hiding this comment.
This spec failed after this change on Rails 7.1
| it "does not remove subscribers that aren't from Rails" do | ||
| proc_subscriber = ActiveSupport::Notifications.subscribe(event_name, proc {}) | ||
| custom_subscriber = | ||
| ActiveSupport::Notifications.subscribe(event_name, CustomListener.new) |
There was a problem hiding this comment.
Also check a custom class, in case there was some special handling of Proc instances
| delegate = listener.instance_variable_get('@delegate') | ||
|
|
||
| # Assume that anything nested under the component namespace is built in to Rails | ||
| delegate.class.name.start_with?("#{component.to_s.classify}::") |
There was a problem hiding this comment.
I don't think this is great, but I can't see a better way to check if the delegate is subscriber or (for Rails 7.1+) an instance of ActionView::LogSubscriber::Start for ActionView or subscriber for ActionController
|
Hey any progress on this? I'm using the branch in production to help our logs. Would love to see this merged. Anything I can help with? |
|
@trobrock I've recently tapped in to help with this project. thanks for the PR, i will be taking a look shortly. i know its been kicking around for quite some time so let me know if anything about the situation has changed. |
Fixes #385
Assumes that a built-in subscriber is nested under the component namespace, so under ActionView or ActionController.