module Semantic # use the Zeitwerk autoloader to reattach_appender for development autoreloading feature class DevLoader def initialize Rails.autoloaders.main.on_load('ApplicationController') do append_ansi_formatter append_subscriber_once end append_ansi_formatter end private def append_ansi_formatter SemanticLogger.clear_appenders! formatter = Semantic::AnsiFormatter.new SemanticLogger.add_appender(io: $stdout, formatter:, filter: ->(log) { !formatter.reject(log) }) end def append_subscriber_once return unless @previous_subscribe.nil? @previous_subscribe = ActiveSupport::Notifications.subscribe 'start_processing.action_controller' do |event| Semantic::LogSubscriber.new.start_processing(event) end end end end