diff --git a/lib/logstasher.rb b/lib/logstasher.rb index 26da3a5..4210ec2 100644 --- a/lib/logstasher.rb +++ b/lib/logstasher.rb @@ -1,8 +1,10 @@ -require 'logger' -require 'logstash-event' +require "logger" +require "logstash-event" module LogStasher class << self + SILENT_LOGGER = ::Logger.new("/dev/null", level: :unknown) + attr_reader :append_fields_callback attr_writer :enabled attr_writer :include_parameters @@ -61,6 +63,9 @@ def log_as_json(payload, as_logstash_event: false) end def logger + # Return a /dev/null logger if logstasher is enabled or silencing was enabled. + return SILENT_LOGGER if !enabled? || silence_standard_logging? + @logger ||= initialize_logger end @@ -78,4 +83,4 @@ def silence_standard_logging? end end -require 'logstasher/railtie' if defined?(Rails) +require "logstasher/railtie" if defined?(Rails) diff --git a/lib/logstasher/device.rb b/lib/logstasher/device.rb index 117ad3f..05360b5 100644 --- a/lib/logstasher/device.rb +++ b/lib/logstasher/device.rb @@ -16,6 +16,8 @@ def self.factory(config) ::LogStasher::Device::UDP.new(config) when "stdout", :stdout then $stdout + when "file", :file then + config["path"] else fail ArgumentError, "Unknown type: #{type}" end diff --git a/lib/logstasher/railtie.rb b/lib/logstasher/railtie.rb index 4bfbfd2..c391420 100644 --- a/lib/logstasher/railtie.rb +++ b/lib/logstasher/railtie.rb @@ -16,45 +16,20 @@ class Railtie < ::Rails::Railtie ::LogStasher.include_parameters = options.include_parameters ::LogStasher.serialize_parameters = options.serialize_parameters ::LogStasher.silence_standard_logging = options.silence_standard_logging - ::LogStasher.logger = options.logger || default_logger + ::LogStasher.logger = options.logger ::LogStasher.logger.level = options.log_level ::LogStasher.metadata = options.metadata end - initializer 'logstasher.load' do - if ::LogStasher.enabled? + config.after_initialize do + if ::LogStasher.enabled? && !::LogStasher.silence_standard_logging? ::ActiveSupport.on_load(:action_controller) do - require 'logstasher/log_subscriber' - require 'logstasher/context_wrapper' + require "logstasher/log_subscriber" + require "logstasher/context_wrapper" include ::LogStasher::ContextWrapper end end end - - config.after_initialize do - if ::LogStasher.enabled? && ::LogStasher.silence_standard_logging? - require 'logstasher/silent_logger' - - ::Rails::Rack::Logger.send(:include, ::LogStasher::SilentLogger) - - ::ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber| - if subscriber.is_a?(::ActiveSupport::LogSubscriber) - subscriber.class.send(:include, ::LogStasher::SilentLogger) - end - end - end - end - - def default_logger - unless @default_logger - path = ::Rails.root.join('log', "logstash_#{::Rails.env}.log") - ::FileUtils.touch(path) # prevent autocreate messages in log - - @default_logger = ::Logger.new(path) - end - - @default_logger - end end end diff --git a/lib/logstasher/silent_logger.rb b/lib/logstasher/silent_logger.rb deleted file mode 100644 index fee7526..0000000 --- a/lib/logstasher/silent_logger.rb +++ /dev/null @@ -1,16 +0,0 @@ -module LogStasher - module SilentLogger - def self.included(klass) - klass.class_eval do - def logger - unless @logstasher_silent_logger - @logstasher_silent_logger = ::Logger.new('/dev/null') - @logstasher_silent_logger.level = ::Logger::UNKNOWN - end - - @logstasher_silent_logger - end - end - end - end -end