Skip to content

Commit 58a6aa4

Browse files
committed
WIP: Overhaul some behaviors of this gem
1. You should be able to set `enabled=false` and that means you will not log anything. Period. 2. You should be able to set `enabled=true` with `silence_standard_logging=true` and it will not include any of the log subscriber code, but it will allow you to log anything custom. 3. You should be able to recreate existing behavior with a different configuration. Example: ``` # directly updating code ::LogStasher.logger = ::Logger.new( ::Rails.root.join("log", "logstash_#{Rails.env}.log")) # via the device factory device = ::LogStasher::Device::Factory(type: :file, path: ::Rails.root.join("log", "logstash_#{Rails.env}.log")) ::LogStasher.logger = ::Logger.new(device) ``` NOTE: This is a breaking change, but it might make default behaviors easier to understand. Right now when `enable=false` it causes logs to be piped to the logstash log file for rails apps, and that seems very awkward. Maybe this is worth fixing?
1 parent a0a24a5 commit 58a6aa4

4 files changed

Lines changed: 15 additions & 49 deletions

File tree

lib/logstasher.rb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
require 'logger'
2-
require 'logstash-event'
1+
require "logger"
2+
require "logstash-event"
33

44
module LogStasher
55
class << self
6+
SILENT_LOGGER = ::Logger.new("/dev/null", level: :unknown)
7+
68
attr_reader :append_fields_callback
79
attr_writer :enabled
810
attr_writer :include_parameters
@@ -61,6 +63,9 @@ def log_as_json(payload, as_logstash_event: false)
6163
end
6264

6365
def logger
66+
# Return a /dev/null logger if logstasher is enabled or silencing was enabled.
67+
return SILENT_LOGGER if !enabled? || silence_standard_logging?
68+
6469
@logger ||= initialize_logger
6570
end
6671

@@ -78,4 +83,4 @@ def silence_standard_logging?
7883
end
7984
end
8085

81-
require 'logstasher/railtie' if defined?(Rails)
86+
require "logstasher/railtie" if defined?(Rails)

lib/logstasher/device.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ def self.factory(config)
1616
::LogStasher::Device::UDP.new(config)
1717
when "stdout", :stdout then
1818
$stdout
19+
when "file", :file then
20+
config["path"]
1921
else
2022
fail ArgumentError, "Unknown type: #{type}"
2123
end

lib/logstasher/railtie.rb

Lines changed: 5 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -16,45 +16,20 @@ class Railtie < ::Rails::Railtie
1616
::LogStasher.include_parameters = options.include_parameters
1717
::LogStasher.serialize_parameters = options.serialize_parameters
1818
::LogStasher.silence_standard_logging = options.silence_standard_logging
19-
::LogStasher.logger = options.logger || default_logger
19+
::LogStasher.logger = options.logger
2020
::LogStasher.logger.level = options.log_level
2121
::LogStasher.metadata = options.metadata
2222
end
2323

24-
initializer 'logstasher.load' do
25-
if ::LogStasher.enabled?
24+
config.after_initialize do
25+
if ::LogStasher.enabled? && !::LogStasher.silence_standard_logging?
2626
::ActiveSupport.on_load(:action_controller) do
27-
require 'logstasher/log_subscriber'
28-
require 'logstasher/context_wrapper'
27+
require "logstasher/log_subscriber"
28+
require "logstasher/context_wrapper"
2929

3030
include ::LogStasher::ContextWrapper
3131
end
3232
end
3333
end
34-
35-
config.after_initialize do
36-
if ::LogStasher.enabled? && ::LogStasher.silence_standard_logging?
37-
require 'logstasher/silent_logger'
38-
39-
::Rails::Rack::Logger.send(:include, ::LogStasher::SilentLogger)
40-
41-
::ActiveSupport::LogSubscriber.log_subscribers.each do |subscriber|
42-
if subscriber.is_a?(::ActiveSupport::LogSubscriber)
43-
subscriber.class.send(:include, ::LogStasher::SilentLogger)
44-
end
45-
end
46-
end
47-
end
48-
49-
def default_logger
50-
unless @default_logger
51-
path = ::Rails.root.join('log', "logstash_#{::Rails.env}.log")
52-
::FileUtils.touch(path) # prevent autocreate messages in log
53-
54-
@default_logger = ::Logger.new(path)
55-
end
56-
57-
@default_logger
58-
end
5934
end
6035
end

lib/logstasher/silent_logger.rb

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)