scout_apm_logging 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8bbd257d9d08bbe578c328b108c2ce42e488ae5f7f0577a2ce7a692bbf208ac0
4
- data.tar.gz: f274d28b0e8485077d460cc5f00d259211a135e580fc5591cb84a04713650476
3
+ metadata.gz: aea114282e91583732d4a4b3246273d0b18ae3b2e5b784366b5a18691889391b
4
+ data.tar.gz: dd625a2eb6bede54138bb05ef3671ad1a98995d59f1c5de28d033fd617d156b6
5
5
  SHA512:
6
- metadata.gz: 120b0718b958634f0ba0b04ab122e4d8b6b2a743962b9089fbf309b0d97616107ebfcbab61dca6684d79079094d46f50cee1d4d27dfe2f4b945b4f6bdb9541da
7
- data.tar.gz: b9fa5e1dcfbe6d005c17a4719c9f8c93750639915d81ba946f597662c101fe4edd2b732dd176a180e6f1043d3f8eda0b9c8f0c6f7cd6a51ff24c7e61203adfaf
6
+ metadata.gz: 4d62832832aa309c9bd66c5cabe2d6c4c23472452bd0f3b9874741febd5f0a5f6716dfea8ff5e929075424ea998a89eb0edb947da9959d0bf03da334a9502158
7
+ data.tar.gz: 94ab281a893c87b2d1b979b4b8fa7c9c2bd0e467983b302c0f0931b04f582dc6dc2c6b9c3c19b83ad14b79ece26a6b4a5f0c7e6cda492b6b840c133ec9d7d5f2
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.0.12
2
+ * Prevent certain attributes from being changed on created FileLogger.
3
+ * Update proxy class to inherit from BasicObject to relay class comparison methods
4
+ to held loggers.
5
+ * Fix ERB evaluation in scout_apm.yml config file to allow for usage of Rails.env.
6
+
1
7
  ## 0.0.11
2
8
  * Fix Scout layer capturing in log attributes for background jobs.
3
9
 
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require_relative '../lib/scout_apm/logging/monitor/_rails.rb'
3
4
  require_relative "../lib/scout_apm/logging/monitor/monitor.rb"
4
5
 
5
6
  ScoutApm::Logging::Monitor.instance.setup!
@@ -6,6 +6,21 @@ module ScoutApm
6
6
  # The actual instance of the logger.
7
7
  class FileLogger < ::Logger
8
8
  include ::ActiveSupport::LoggerSilence if const_defined?('::ActiveSupport::LoggerSilence')
9
+
10
+ # Other loggers may be extended with additional methods that have not been applied to this file logger.
11
+ # Most likely, these methods will still utilize the exiting logging methods to write to the IO device,
12
+ # however, if this is not the case we may miss logs. With that being said, we shouldn't impact the original
13
+ # applications intended behavior and let the user know we don't support it and no-op.
14
+ def method_missing(name, *_args)
15
+ return unless defined?(::Rails)
16
+
17
+ ::Rails.logger.warn("Method #{name} called on ScoutApm::Logging::Loggers::FileLogger, but it is not defined.")
18
+ end
19
+
20
+ # More impactful for the broadcast logger.
21
+ def respond_to_missing?(name, *_args)
22
+ super
23
+ end
9
24
  end
10
25
 
11
26
  # The newly created logger which we can configure, and will log to a filepath.
@@ -11,10 +11,10 @@ module ScoutApm
11
11
  # Patches TaggedLogging to work with our loggers.
12
12
  module TaggedLogging
13
13
  def tagged(*tags) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
14
- return super(*tags) unless (self == ::Rails.logger && is_a?(ScoutApm::Logging::Loggers::Proxy)) ||
14
+ return super(*tags) unless (self == ::Rails.logger && respond_to?(:is_scout_proxy_logger?)) ||
15
15
  (::Rails.logger.respond_to?(:broadcasts) && ::Rails.logger.broadcasts.include?(self))
16
16
 
17
- if is_a?(ScoutApm::Logging::Loggers::Proxy)
17
+ if respond_to?(:is_scout_proxy_logger?)
18
18
  if block_given?
19
19
  # We skip the first logger to prevent double tagging when calling formatter.tagged
20
20
  loggers = @loggers[1..]
@@ -4,7 +4,9 @@ module ScoutApm
4
4
  module Logging
5
5
  module Loggers
6
6
  # Holds both the original application logger and the new one. Relays commands to both.
7
- class Proxy
7
+ class Proxy < BasicObject
8
+ include ::Kernel
9
+
8
10
  def self.create_with_loggers(*loggers)
9
11
  new.tap do |proxy_logger|
10
12
  loggers.each { |logger| proxy_logger.add_scout_loggers(logger) }
@@ -25,6 +27,25 @@ module ScoutApm
25
27
  @loggers
26
28
  end
27
29
 
30
+ # We don't want other libraries to change the formatter of the logger we create.
31
+ def formatter=(formatter)
32
+ @loggers.first.formatter = formatter
33
+ end
34
+
35
+ # We don't want other libraries to change the level of the logger we create, as this
36
+ # is dictated by the logs_capture_level configuration.
37
+ def level=(level)
38
+ @loggers.first.level = level
39
+ end
40
+
41
+ def class
42
+ ::Logger
43
+ end
44
+
45
+ def is_scout_proxy_logger?
46
+ true
47
+ end
48
+
28
49
  def method_missing(name, *args, &block)
29
50
  # Some libraries will do stuff like Library.logger.formatter = Rails.logger.formatter
30
51
  # As such, we should return the first logger's (the original logger) return value.
@@ -50,11 +50,11 @@ module ScoutApm
50
50
  logger.formatter = log_instance.formatter
51
51
 
52
52
  if ::Rails.env.development? && $stdout.tty? && $stderr.tty?
53
- next if ActiveSupport::Logger.respond_to?(:logger_outputs_to?) && ActiveSupport::Logger.logger_outputs_to?(
53
+ next if ::ActiveSupport::Logger.respond_to?(:logger_outputs_to?) && ::ActiveSupport::Logger.logger_outputs_to?(
54
54
  logger, $stdout, $stderr
55
55
  )
56
56
 
57
- logger.extend(ActiveSupport::Logger.broadcast(ActiveSupport::Logger.new($stdout)))
57
+ logger.extend(ActiveSupport::Logger.broadcast(::ActiveSupport::Logger.new($stdout)))
58
58
  end
59
59
  end
60
60
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ # We start the monitor process outside the context of Rails, and ultimately don't use
4
+ # it for anything related to starting the collector. However, when we load the config/scout_apm.yml file,
5
+ # we support ERB, and users may be using Rails.env methods for naming the app, or configuring whether
6
+ # monitor should be enabled for a specific environment.
7
+
8
+ require 'active_support'
9
+
10
+ # https://github.com/rails/rails/blob/v7.2.1/railties/lib/rails.rb#L76
11
+ module Rails
12
+ class << self
13
+ def env
14
+ # EnvironmentInquirer was added in Rails 6.1
15
+ @env ||= if const_defined?('::ActiveSupport::EnvironmentInquirer')
16
+ ::ActiveSupport::EnvironmentInquirer.new(ENV['RAILS_ENV'].presence || ENV['RACK_ENV'].presence || 'development')
17
+ else
18
+ ::ActiveSupport::StringInquirer.new(ENV['RAILS_ENV'].presence || ENV['RACK_ENV'].presence || 'development')
19
+ end
20
+ end
21
+ end
22
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ScoutApm
4
4
  module Logging
5
- VERSION = '0.0.11'
5
+ VERSION = '0.0.12'
6
6
  end
7
7
  end
@@ -35,7 +35,7 @@ describe ScoutApm::Logging::Loggers::Capture do
35
35
  capture = ScoutApm::Logging::Loggers::Capture.new(context)
36
36
  capture.setup!
37
37
 
38
- expect(TestLoggerWrapper.logger.class).to eq(ScoutApm::Logging::Loggers::Proxy)
38
+ expect(TestLoggerWrapper.logger.respond_to?(:is_scout_proxy_logger?)).to eq(true)
39
39
 
40
40
  TestLoggerWrapper.logger.info('TEST')
41
41
  TestLoggerWrapper.logger.debug('SHOULD NOT CAPTURE')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scout_apm_logging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scout APM
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-08-23 00:00:00.000000000 Z
11
+ date: 2024-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: scout_apm
@@ -94,6 +94,7 @@ files:
94
94
  - lib/scout_apm/logging/loggers/swaps/rails.rb
95
95
  - lib/scout_apm/logging/loggers/swaps/scout.rb
96
96
  - lib/scout_apm/logging/loggers/swaps/sidekiq.rb
97
+ - lib/scout_apm/logging/monitor/_rails.rb
97
98
  - lib/scout_apm/logging/monitor/collector/checksum.rb
98
99
  - lib/scout_apm/logging/monitor/collector/configuration.rb
99
100
  - lib/scout_apm/logging/monitor/collector/downloader.rb