diff options
Diffstat (limited to 'config/initializers/lograge.rb')
-rw-r--r-- | config/initializers/lograge.rb | 54 |
1 files changed, 32 insertions, 22 deletions
diff --git a/config/initializers/lograge.rb b/config/initializers/lograge.rb index e3601a9538e..0ea0adf86bc 100644 --- a/config/initializers/lograge.rb +++ b/config/initializers/lograge.rb @@ -1,30 +1,40 @@ # Only use Lograge for Rails unless Gitlab::Runtime.sidekiq? - filename = File.join(Rails.root, 'log', "#{Rails.env}_json.log") + Rails.application.reloader.to_prepare do + filename = File.join(Rails.root, 'log', "#{Rails.env}_json.log") + db_counter = Gitlab::Metrics::Subscribers::ActiveRecord - Rails.application.configure do - config.lograge.enabled = true - # Store the lograge JSON files in a separate file - config.lograge.keep_original_rails_log = Gitlab::Utils.to_boolean(ENV.fetch('UNSTRUCTURED_RAILS_LOG', 'true')) - # Don't use the Logstash formatter since this requires logstash-event, an - # unmaintained gem that monkey patches `Time` - config.lograge.formatter = Lograge::Formatters::Json.new - config.lograge.logger = ActiveSupport::Logger.new(filename) - config.lograge.before_format = lambda do |data, payload| - data.delete(:error) - data[:db_duration_s] = Gitlab::Utils.ms_to_round_sec(data.delete(:db)) if data[:db] - data[:view_duration_s] = Gitlab::Utils.ms_to_round_sec(data.delete(:view)) if data[:view] - data[:duration_s] = Gitlab::Utils.ms_to_round_sec(data.delete(:duration)) if data[:duration] - data.merge!(::Gitlab::Metrics::Subscribers::ActiveRecord.db_counter_payload) + Rails.application.configure do + config.lograge.enabled = true + # Store the lograge JSON files in a separate file + config.lograge.keep_original_rails_log = Gitlab::Utils.to_boolean(ENV.fetch('UNSTRUCTURED_RAILS_LOG', 'true')) + # Don't use the Logstash formatter since this requires logstash-event, an + # unmaintained gem that monkey patches `Time` + config.lograge.formatter = Lograge::Formatters::Json.new + config.lograge.logger = ActiveSupport::Logger.new(filename) + config.lograge.before_format = lambda do |data, payload| + data.delete(:error) + data[:db_duration_s] = Gitlab::Utils.ms_to_round_sec(data.delete(:db)) if data[:db] + data[:view_duration_s] = Gitlab::Utils.ms_to_round_sec(data.delete(:view)) if data[:view] + data[:duration_s] = Gitlab::Utils.ms_to_round_sec(data.delete(:duration)) if data[:duration] + data.merge!(db_counter.db_counter_payload) - data - end + # Remove empty hashes to prevent type mismatches + # These are set to empty hashes in Lograge's ActionCable subscriber + # https://github.com/roidrage/lograge/blob/v0.11.2/lib/lograge/log_subscribers/action_cable.rb#L14-L16 + %i(method path format).each do |key| + data[key] = nil if data[key] == {} + end + + data + end - # This isn't a user-reachable controller; we use it to check for a - # valid CSRF token in the API - config.lograge.ignore_actions = ['Gitlab::RequestForgeryProtection::Controller#index'] + # This isn't a user-reachable controller; we use it to check for a + # valid CSRF token in the API + config.lograge.ignore_actions = ['Gitlab::RequestForgeryProtection::Controller#index'] - # Add request parameters to log output - config.lograge.custom_options = Gitlab::Lograge::CustomOptions + # Add request parameters to log output + config.lograge.custom_options = Gitlab::Lograge::CustomOptions + end end end |