logjam_agent 0.34.2 → 0.35.0

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: 2dfc15309d8eff89747771c28c14be766acdbffce10fa2121e07820b9d628d84
4
- data.tar.gz: 32646c3d1020458de93151ed03f3c48248fe0bef27b404c21d1a87dfad05a82e
3
+ metadata.gz: c22b624762a595ee627fba548bc5e41a3ac3a0180fdc8fa067969138963dd116
4
+ data.tar.gz: ee6d22ec9272fea8c786e16ca7088c7711b258bf1e6a7dd665270a5e5b9a5b62
5
5
  SHA512:
6
- metadata.gz: fb48957ea64f8da0a16770ff30ff927019c09d604ccec6ea018a9b43da9a67fb63eb656ea61d535e089516a340c5c5e42454f764acc9bdcefcab75b5dfba1f0f
7
- data.tar.gz: 5bddcb2bc40fb7e5eade6dfe290fa9cde23b9b3fb69650f092a54b838ee780726d7a11e985f1e26f708bcbf6671cdb89910c4201fc82dc9ee57592191be3c85a
6
+ metadata.gz: aac5ad227a70fa16e232c01abb6cea2b4852d717a7b81dc681a137bbe91d71f3cf7fc23901fc280a6db65eece15ac6c1608bf22e140351a8436020ef80a7b1db
7
+ data.tar.gz: d63f3d7758b328f01b2f4855c2dc9ef51cd1c1ed1152c900c46a942d389d38915d554ee732255c0ab946118209afbf528e47186a0d9825e1dfa351363615c3ab
data/README.md CHANGED
@@ -166,6 +166,16 @@ Sinatra's environment setting.
166
166
  Set the environment variable `APP_LOG_TO_STDOUT` if you want to log to `STDOUT`.
167
167
  Otherwise, logs will appear in the subdirectory `log` of your application's root.
168
168
 
169
+ ## Selective Logging
170
+
171
+ The agent adds log lines to the request information sent via ZMQ on
172
+ the logging bus and also writes log lines to the configured log
173
+ device.
174
+
175
+ Using one of the logjam helpers `LogjamAgent.logjam_only` or
176
+ `LogjamAgent.logdevice_only` it is possible to send information to
177
+ only one of those log line sinks for the duration of a given block.
178
+
169
179
 
170
180
  ## Troubleshooting
171
181
 
@@ -60,17 +60,16 @@ module LogjamAgent
60
60
  attributes = formatter.render_attributes
61
61
  message = "[#{attributes}] #{message}" if attributes
62
62
  time = Time.now
63
- if log_to_log_device
63
+ if log_to_log_device && !SelectiveLogging.logjam_only?
64
64
  formatted_message = formatter.call(format_severity(severity), time, progname, message)
65
- @logdev.write(formatted_message)
65
+ @logdev.write(formatted_message) if @logdev
66
66
  end
67
- request.add_line(severity, time, message) if request
67
+ request.add_line(severity, time, message) if request && !SelectiveLogging.logdevice_only?
68
68
  message
69
69
  end
70
70
 
71
71
  def logdev=(log_device)
72
72
  raise "cannot connect logger to new log device" unless log_device.respond_to?(:write)
73
- raise "cannot set log device" unless defined?(@logdev)
74
73
  @logdev = log_device
75
74
  end
76
75
 
@@ -0,0 +1,28 @@
1
+ module LogjamAgent
2
+ module RequestHandling
3
+ extend self
4
+
5
+ def request
6
+ Thread.current.thread_variable_get(:logjam_request)
7
+ end
8
+
9
+ def request=(request)
10
+ Thread.current.thread_variable_set(:logjam_request, request)
11
+ end
12
+
13
+ def start_request(*args)
14
+ initial_fields = args.extract_options!
15
+ app = args[0] || LogjamAgent.application_name
16
+ env = args[1] || LogjamAgent.environment_name
17
+ self.request = Request.new(app, env, initial_fields)
18
+ end
19
+
20
+ def finish_request(additional_fields = {})
21
+ if request = self.request
22
+ request.fields.merge!(additional_fields)
23
+ self.request = nil
24
+ request.forward
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,37 @@
1
+ module LogjamAgent
2
+ module SelectiveLogging
3
+ extend self
4
+
5
+ def logjam_only
6
+ old_selector = logjam_log_selector
7
+ self.logjam_log_selector = :logjam_only
8
+ yield
9
+ ensure
10
+ self.logjam_log_selector = old_selector
11
+ end
12
+
13
+ def logdevice_only
14
+ old_selector = logjam_log_selector
15
+ self.logjam_log_selector = :logdevice_only
16
+ yield
17
+ ensure
18
+ self.logjam_log_selector = old_selector
19
+ end
20
+
21
+ def logjam_log_selector
22
+ Thread.current.thread_variable_get(:logjam_log_selector)
23
+ end
24
+
25
+ def logjam_log_selector=(selector)
26
+ Thread.current.thread_variable_set(:logjam_log_selector, selector)
27
+ end
28
+
29
+ def logjam_only?
30
+ logjam_log_selector == :logjam_only
31
+ end
32
+
33
+ def logdevice_only?
34
+ logjam_log_selector == :logdevice_only
35
+ end
36
+ end
37
+ end
@@ -1,3 +1,3 @@
1
1
  module LogjamAgent
2
- VERSION = "0.34.2"
2
+ VERSION = "0.35.0"
3
3
  end
data/lib/logjam_agent.rb CHANGED
@@ -8,38 +8,13 @@ module Logger::Severity
8
8
  NONE = UNKNOWN + 1
9
9
  end
10
10
 
11
- module LogjamAgent
12
- module RequestHandling
13
- def request
14
- Thread.current.thread_variable_get(:logjam_request)
15
- end
16
-
17
- def request=(request)
18
- Thread.current.thread_variable_set(:logjam_request, request)
19
- end
20
-
21
- def start_request(*args)
22
- initial_fields = args.extract_options!
23
- app = args[0] || LogjamAgent.application_name
24
- env = args[1] || LogjamAgent.environment_name
25
- self.request = Request.new(app, env, initial_fields)
26
- end
27
-
28
- def finish_request(additional_fields = {})
29
- if request = self.request
30
- request.fields.merge!(additional_fields)
31
- self.request = nil
32
- request.forward
33
- end
34
- end
35
- end
36
- end
37
-
38
11
  require "logjam_agent/version"
39
12
  require "logjam_agent/util"
40
13
  require "logjam_agent/zmq_forwarder"
41
14
  require "logjam_agent/forwarders"
42
15
  require "logjam_agent/request"
16
+ require "logjam_agent/selective_logging"
17
+ require "logjam_agent/request_handling"
43
18
  require "logjam_agent/buffered_logger"
44
19
  require "logjam_agent/logging_attributes"
45
20
  require "logjam_agent/syslog_like_formatter"
@@ -120,6 +95,7 @@ module LogjamAgent
120
95
  end
121
96
 
122
97
  extend RequestHandling
98
+ extend SelectiveLogging
123
99
 
124
100
  NO_COMPRESSION = 0
125
101
  ZLIB_COMPRESSION = 1
@@ -0,0 +1,59 @@
1
+ require_relative "test_helper.rb"
2
+
3
+ module LogjamAgent
4
+ class SelectiveLoggingTest < MiniTest::Test
5
+ class MockLogDev
6
+ attr_reader :lines
7
+ def initialize
8
+ @lines = []
9
+ end
10
+ def write(s)
11
+ @lines << s
12
+ end
13
+ end
14
+
15
+ def setup
16
+ @request = LogjamAgent.request = Request.new("app", "env", {})
17
+ @lines = @request.instance_variable_get :@lines
18
+ @logger = BufferedLogger.new(File::NULL)
19
+ @device = MockLogDev.new
20
+ @logger.logdev = @device
21
+ end
22
+
23
+ def teardown
24
+ LogjamAgent.request = nil
25
+ end
26
+
27
+ def test_normal_logging_adds_line_to_request_and_logdevice
28
+ assert !LogjamAgent.logjam_only?
29
+ assert !LogjamAgent.logdevice_only?
30
+ @logger.info("normal")
31
+ assert_equal 1, @lines.size
32
+ assert_equal "normal", @lines.first.last
33
+ assert_equal 1, @device.lines.size
34
+ assert_match(/normal\n/, @device.lines.first)
35
+ end
36
+
37
+ def test_logjam_only_logging_adds_line_to_request_but_not_to_logdevice
38
+ LogjamAgent.logjam_only do
39
+ assert LogjamAgent.logjam_only?
40
+ assert !LogjamAgent.logdevice_only?
41
+ @logger.info("logjam_only")
42
+ end
43
+ assert_equal 1, @lines.size
44
+ assert_equal "logjam_only", @lines.first.last
45
+ assert_equal 0, @device.lines.size
46
+ end
47
+
48
+ def test_logdevice_only_logging_adds_line_to_logdevice_but_not_to_request
49
+ LogjamAgent.logdevice_only do
50
+ assert !LogjamAgent.logjam_only?
51
+ assert LogjamAgent.logdevice_only?
52
+ @logger.info("logdevice_only")
53
+ end
54
+ assert_equal [], @lines
55
+ assert_equal 1, @device.lines.size
56
+ assert_match(/logdevice_only\n/, @device.lines.first)
57
+ end
58
+ end
59
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logjam_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.34.2
4
+ version: 0.35.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Kaes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-31 00:00:00.000000000 Z
11
+ date: 2022-10-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -244,12 +244,15 @@ files:
244
244
  - lib/logjam_agent/railtie.rb
245
245
  - lib/logjam_agent/receiver.rb
246
246
  - lib/logjam_agent/request.rb
247
+ - lib/logjam_agent/request_handling.rb
248
+ - lib/logjam_agent/selective_logging.rb
247
249
  - lib/logjam_agent/sinatra.rb
248
250
  - lib/logjam_agent/syslog_like_formatter.rb
249
251
  - lib/logjam_agent/util.rb
250
252
  - lib/logjam_agent/version.rb
251
253
  - lib/logjam_agent/zmq_forwarder.rb
252
254
  - test/request_test.rb
255
+ - test/selective_logging_test.rb
253
256
  - test/sinatra_app.rb
254
257
  - test/sinatra_classic_app.rb
255
258
  - test/sinatra_classic_test.rb
@@ -282,6 +285,7 @@ specification_version: 4
282
285
  summary: Logjam client library to be used with logjam
283
286
  test_files:
284
287
  - test/sinatra_app.rb
288
+ - test/selective_logging_test.rb
285
289
  - test/sinatra_classic_test.rb
286
290
  - test/sinatra_classic_app.rb
287
291
  - test/request_test.rb