From 625fbc578019b012572f75e68324deeb46ff8dd8 Mon Sep 17 00:00:00 2001 From: pvincent Date: Sat, 7 Sep 2024 18:39:23 +0400 Subject: [PATCH] semantic_logger auto_reload --- app/controllers/scores_controller.rb | 1 + config/environments/development.rb | 43 ++++++++++++++++++++++++---- lib/semantic/ansi_formatter.rb | 1 + 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/app/controllers/scores_controller.rb b/app/controllers/scores_controller.rb index 9723565..a817261 100644 --- a/app/controllers/scores_controller.rb +++ b/app/controllers/scores_controller.rb @@ -5,6 +5,7 @@ class ScoresController < ApplicationController before_action :set_score, only: %i[show edit update destroy] def index + logger.info 'index called A' @q = Score.all.ransack(q_params) @pagy, @scores = pagy(@q.result) end diff --git a/config/environments/development.rb b/config/environments/development.rb index 7b947f4..a06056e 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -77,10 +77,43 @@ Rails.application.configure do # rubocop:disable Metrics/BlockLength routes.default_url_options[:port] = ARGV[1] # ie: Procfile.dev --port PORT routes.default_url_options[:host] = '127.0.0.1' - config.after_initialize do - formatter = Semantic::AnsiFormatter.new - config.semantic_logger.add_appender(io: $stdout, - formatter:, - filter: ->(log) { !formatter.reject(log) }) + if Rails.application.console? + config.after_initialize do + formatter = Semantic::BasicFormatter.new + SemanticLogger.add_appender(io: $stdout, formatter:) + + # SemanticLogger.add_appender(io: $stdout, + # formatter:, + # filter: ->(log) { !formatter.reject(log) }) + end + elsif Rails.application.server? + + config.after_initialize do + source_location = Semantic::AnsiFormatter.instance_method(:initialize).source_location[0] + previous_mtime = File.stat(source_location).mtime + formatter = Semantic::AnsiFormatter.new + # SemanticLogger.clear_appenders! + SemanticLogger.add_appender(io: $stdout, + formatter:, + filter: ->(log) { !formatter.reject(log) }) + + [Semantic::AnsiFormatter, ApplicationController].each do |class_name| + Rails.autoloaders.main.on_load(class_name.to_s) do |klass, abspath| + if klass == Semantic::AnsiFormatter + mtime = File.stat(source_location).mtime + if previous_mtime != mtime + previous_mtime = mtime + SemanticLogger.clear_appenders! + formatter = Semantic::AnsiFormatter.new + SemanticLogger.add_appender(io: $stdout, + formatter:, + filter: lambda { |log| + !formatter.reject(log) + }) + end + end + end + end + end end end diff --git a/lib/semantic/ansi_formatter.rb b/lib/semantic/ansi_formatter.rb index cb0ba3c..4afc501 100644 --- a/lib/semantic/ansi_formatter.rb +++ b/lib/semantic/ansi_formatter.rb @@ -28,6 +28,7 @@ module Semantic end def call(log, logger) + # puts 'ok1' log = alter(log) self.log = log