module Heavylog
Constants
- ANSI_REGEX
- TRUNCATION
- VERSION
Public Instance Methods
attach_to_action_controller()
click to toggle source
# File lib/heavylog.rb, line 48 def attach_to_action_controller Heavylog::LogSubscriber.attach_to :action_controller end
attach_to_sidekiq()
click to toggle source
# File lib/heavylog.rb, line 52 def attach_to_sidekiq return unless config.log_sidekiq Sidekiq.configure_server do |config| config.options[:job_logger] = SidekiqLogger end Sidekiq.error_handlers << SidekiqExceptionHandler.new end
config()
click to toggle source
# File lib/heavylog.rb, line 151 def config return OrderedOptions.new unless application application.config.heavylog end
extend_base_controller_class(klass)
click to toggle source
# File lib/heavylog.rb, line 71 def extend_base_controller_class(klass) append_payload_method = klass.instance_method(:append_info_to_payload) custom_payload_method = config.custom_payload_method klass.send(:define_method, :append_info_to_payload) do |payload| append_payload_method.bind(self).call(payload) payload[:custom_payload] = custom_payload_method.call(self) end end
finish()
click to toggle source
# File lib/heavylog.rb, line 127 def finish return unless config.enabled buffer = RequestStore.store[:heavylog_buffer] return unless buffer && Heavylog.logger request = { request_id: RequestStore.store[:heavylog_request_id], request_start: RequestStore.store[:heavylog_request_start], ip: RequestStore.store[:heavylog_request_ip], messages: buffer.string.dup, }.merge(RequestStore.store[:heavylog_request_data] || {}) formatted = Heavylog.formatter.call(request.transform_keys(&:to_s)) Heavylog.logger.send(Heavylog.log_level, formatted) rescue StandardError => e config.error_handler&.(e) end
finish_sidekiq()
click to toggle source
# File lib/heavylog.rb, line 146 def finish_sidekiq finish RequestStore.store[:heavylog_buffer] = nil end
log(_severity, message=nil, progname=nil) { || ... }
click to toggle source
# File lib/heavylog.rb, line 81 def log(_severity, message=nil, progname=nil) return unless config.enabled return if !!RequestStore.store[:heavylog_truncated] uuid = RequestStore.store[:heavylog_request_id] return unless uuid if message.nil? message = if block_given? yield else progname end end message = message.gsub(ANSI_REGEX, "") if message.respond_to?(:gsub) message = message.map { |m| m.respond_to?(:gsub) ? m.gsub(ANSI_REGEX, "") : m } if message.is_a?(Array) RequestStore.store[:heavylog_buffer] ||= StringIO.new if RequestStore.store[:heavylog_buffer].length + message_size(message) > config.message_limit RequestStore.store[:heavylog_buffer].truncate(0) RequestStore.store[:heavylog_buffer].puts(TRUNCATION) RequestStore.store[:heavylog_truncated] = true else RequestStore.store[:heavylog_buffer].puts(message) end end
log_sidekiq(jid, klass, args)
click to toggle source
# File lib/heavylog.rb, line 111 def log_sidekiq(jid, klass, args) return unless config.enabled RequestStore.store[:heavylog_request_id] = jid RequestStore.store[:heavylog_request_start] = Time.now.iso8601 RequestStore.store[:heavylog_request_ip] = "127.0.0.1" RequestStore.store[:heavylog_request_data] = { controller: "SidekiqLogger", action: klass, args: args.to_s, } RequestStore.store[:heavylog_buffer] ||= StringIO.new end
message_size(message)
click to toggle source
# File lib/heavylog.rb, line 157 def message_size(message) return message.bytesize if message.respond_to?(:bytesize) return message.map(&:to_s).sum(&:bytesize) if message.is_a?(Array) message.to_s.length end
patch_loggers()
click to toggle source
# File lib/heavylog.rb, line 31 def patch_loggers Rails.logger.extend(RequestLogger) if defined?(Rails) end
set_options()
click to toggle source
# File lib/heavylog.rb, line 35 def set_options if config.path f = File.open(config.path, "a") f.binmode f.sync = true Heavylog.logger = ActiveSupport::Logger.new(f) end Heavylog.formatter = config.formatter || Heavylog::Formatters::Raw.new Heavylog.log_level = config.log_level || :info end
setup(app)
click to toggle source
# File lib/heavylog.rb, line 22 def setup(app) self.application = app patch_loggers attach_to_action_controller attach_to_sidekiq setup_custom_payload set_options end
setup_custom_payload()
click to toggle source
# File lib/heavylog.rb, line 62 def setup_custom_payload return unless config.custom_payload_method.respond_to?(:call) klasses = Array(config.base_controller_class) klasses.map! { |klass| klass.try(:constantize) } klasses.push(ActionController::Base, ActionController::API) if klasses.empty? klasses.each { |klass| extend_base_controller_class(klass) } end