semantic_logger 4.1.0 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b0ad46c624c9904d87ec5b38c7fdc28e12dcc62d
4
- data.tar.gz: 92ce4e537d95a70422e9662001683c82a75ce7dd
3
+ metadata.gz: 4cf47326afecad1dcc0ecd8cffa732b51c023356
4
+ data.tar.gz: d8d72838b88abb13b94e1433d1676fff824eda26
5
5
  SHA512:
6
- metadata.gz: fb9845a97ecaed5b6e91f0a97e6fc61464411969af7798ebd04e336eea66e115df1447514a3fd80c3d1e36236f79071ebd8dfc2b9bdcf2af1100deeb2297d389
7
- data.tar.gz: 23cd01a8709c925132f82ddf697aa8b29a57a35a595ad308ba772c948cef722b25d9aacbd6c89d56531f08dcfdd25727dc486223d867db7e868564e2d29e0f86
6
+ metadata.gz: fbefeb4f49ea32b347f09997baf3c9ca7138177c1ae9ea307088ca900cc74ad0fd8d1af8fba0479fcfbd16c37ec9df24aeb1e0fbe988eef90b3fce0e92933652
7
+ data.tar.gz: 0e168803566680fa7b20843df409e55bc4767b90a23c89249a6d7d7237f1b683d135088fc250a192d37726930ebee972844cb5b002e39c68b244eec8ad271d25
@@ -41,8 +41,9 @@ module SemanticLogger
41
41
  end
42
42
  # @formatter:on
43
43
 
44
- # Close and flush all appenders at exit, waiting for outstanding messages on the queue
45
- # to be written first
44
+ # Flush all appenders at exit, waiting for outstanding messages on the queue
45
+ # to be written first.
46
46
  at_exit do
47
- SemanticLogger.close
47
+ # Cannot close since test frameworks only run at exit, at which point the logging would already be closed.
48
+ SemanticLogger.flush
48
49
  end
@@ -38,7 +38,7 @@ class SemanticLogger::Appender::Bugsnag < SemanticLogger::Subscriber
38
38
 
39
39
  # Returns [Hash] of parameters to send to Bugsnag.
40
40
  def call(log, logger)
41
- h = SemanticLogger::Formatters::Raw.new.call(log, logger)
41
+ h = SemanticLogger::Formatters::Raw.new.call(log, logger)
42
42
  h[:severity] = log_level(log)
43
43
  h.delete(:message) if h[:exception] && (h[:message] == h[:exception][:message])
44
44
  h.delete(:time)
@@ -69,7 +69,7 @@ class SemanticLogger::Appender::Elasticsearch < SemanticLogger::Subscriber
69
69
  # Name of this application to appear in log messages.
70
70
  # Default: SemanticLogger.application
71
71
  def initialize(url: 'http://localhost:9200', index: 'semantic_logger', type: 'log', flush_interval: 1, timeout_interval: 10, batch_size: 500,
72
- level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
72
+ level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
73
73
 
74
74
  @url = url
75
75
  @index = index
@@ -49,13 +49,13 @@ class SemanticLogger::Appender::ElasticsearchHttp < SemanticLogger::Appender::Ht
49
49
  # Name of this application to appear in log messages.
50
50
  # Default: SemanticLogger.application
51
51
  def initialize(index: 'semantic_logger', type: 'log',
52
- url: 'http://localhost:9200', compress: false, ssl: {}, open_timeout: 2.0, read_timeout: 1.0, continue_timeout: 1.0,
53
- level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
52
+ url: 'http://localhost:9200', compress: false, ssl: {}, open_timeout: 2.0, read_timeout: 1.0, continue_timeout: 1.0,
53
+ level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
54
54
 
55
55
  @index = index
56
56
  @type = type
57
- super(url: url, compress: compress, ssl: ssl, open_timeout: 2.0, read_timeout: open_timeout, continue_timeout: continue_timeout,
58
- level: level, formatter: formatter, filter: filter, application: application, host: host, &block)
57
+ super(url: url, compress: compress, ssl: ssl, open_timeout: 2.0, read_timeout: open_timeout, continue_timeout: continue_timeout,
58
+ level: level, formatter: formatter, filter: filter, application: application, host: host, &block)
59
59
 
60
60
  @request_path = "#{@path.end_with?('/') ? @path : "#{@path}/"}#{@index}-%Y.%m.%d"
61
61
  @logging_path = "#{@request_path}/#{type}"
@@ -81,7 +81,7 @@ class SemanticLogger::Appender::Graylog < SemanticLogger::Subscriber
81
81
  # Name of this application to appear in log messages.
82
82
  # Default: SemanticLogger.application
83
83
  def initialize(url: 'udp://localhost:12201', max_size: 'WAN', gelf_options: {}, level_map: LevelMap.new,
84
- level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
84
+ level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
85
85
 
86
86
  @url = url
87
87
  @max_size = max_size
@@ -17,7 +17,7 @@ require 'json'
17
17
  # )
18
18
  class SemanticLogger::Appender::Http < SemanticLogger::Subscriber
19
19
  attr_accessor :username, :application, :host, :compress, :header,
20
- :open_timeout, :read_timeout, :continue_timeout
20
+ :open_timeout, :read_timeout, :continue_timeout
21
21
  attr_reader :http, :url, :server, :port, :path, :ssl_options
22
22
 
23
23
  # Create HTTP(S) log appender
@@ -78,7 +78,7 @@ class SemanticLogger::Appender::Http < SemanticLogger::Subscriber
78
78
  # continue_timeout: [Float]
79
79
  # Default: 1.0
80
80
  def initialize(url:, compress: false, ssl: {}, username: nil, password: nil, open_timeout: 2.0, read_timeout: 1.0, continue_timeout: 1.0,
81
- level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
81
+ level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
82
82
 
83
83
  @url = url
84
84
  @ssl_options = ssl
@@ -21,9 +21,9 @@ require 'date'
21
21
  # )
22
22
  class SemanticLogger::Appender::Kafka < SemanticLogger::Subscriber
23
23
  attr_accessor :seed_brokers, :client_id, :connect_timeout, :socket_timeout,
24
- :ssl_ca_cert, :ssl_client_cert, :ssl_client_cert_key,
25
- :delivery_threshold, :delivery_interval,
26
- :topic, :partition, :partition_key, :key
24
+ :ssl_ca_cert, :ssl_client_cert, :ssl_client_cert_key,
25
+ :delivery_threshold, :delivery_interval,
26
+ :topic, :partition, :partition_key, :key
27
27
 
28
28
  # Send log messages to Kafka in JSON format.
29
29
  #
@@ -110,10 +110,10 @@ class SemanticLogger::Appender::Kafka < SemanticLogger::Subscriber
110
110
  # Name of this application to appear in log messages.
111
111
  # Default: SemanticLogger.application
112
112
  def initialize(seed_brokers:, client_id: 'semantic-logger', connect_timeout: nil, socket_timeout: nil,
113
- ssl_ca_cert: nil, ssl_client_cert: nil, ssl_client_cert_key: nil,
114
- topic: 'log_messages', partition: nil, partition_key: nil, key: nil,
115
- delivery_threshold: 100, delivery_interval: 10,
116
- level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
113
+ ssl_ca_cert: nil, ssl_client_cert: nil, ssl_client_cert_key: nil,
114
+ topic: 'log_messages', partition: nil, partition_key: nil, key: nil,
115
+ delivery_threshold: 100, delivery_interval: 10,
116
+ level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
117
117
 
118
118
  @seed_brokers = seed_brokers
119
119
  @client_id = @client_id
@@ -104,7 +104,7 @@ module SemanticLogger
104
104
  # Name of this application to appear in log messages.
105
105
  # Default: SemanticLogger.application
106
106
  def initialize(uri:, collection_name: 'semantic_logger', write_concern: 0, collection_size: 1024**3, collection_max: nil,
107
- level: nil, formatter: nil, filter: nil, host: nil, application: nil, &block)
107
+ level: nil, formatter: nil, filter: nil, host: nil, application: nil, &block)
108
108
 
109
109
  @client = Mongo::Client.new(uri, logger: SemanticLogger::Processor.logger.clone)
110
110
  @collection_name = collection_name
@@ -36,25 +36,28 @@ class SemanticLogger::Appender::Sentry < SemanticLogger::Subscriber
36
36
  # Name of this application to appear in log messages.
37
37
  # Default: SemanticLogger.application
38
38
  def initialize(level: :error, formatter: nil, filter: nil, application: nil, host: nil, &block)
39
+ # Replace the Sentry Raven logger so that we can identify its log messages and not forward them to Sentry
40
+ Raven.configure { |config| config.logger = SemanticLogger[Raven] }
39
41
  super(level: level, formatter: formatter, filter: filter, application: application, host: host, &block)
40
42
  end
41
43
 
42
44
  # Send an error notification to sentry
43
45
  def log(log)
44
46
  return false unless should_log?(log)
47
+ # Ignore logs coming from Ravent itself
48
+ return false if log.name == 'Raven'
45
49
 
46
50
  context = formatter.call(log, self)
47
51
  if log.exception
48
52
  context.delete(:exception)
49
53
  Raven.capture_exception(log.exception, context)
50
54
  else
51
- message = {
52
- error_class: context.delete(:name),
53
- error_message: context.delete(:message),
54
- extra: context
55
+ attrs = {
56
+ level: context.delete(:level),
57
+ extra: context
55
58
  }
56
- message[:backtrace] = log.backtrace if log.backtrace
57
- Raven.capture_message(message[:error_message], message)
59
+ attrs[:extra][:backtrace] = log.backtrace if log.backtrace
60
+ Raven.capture_message(context[:message], attrs)
58
61
  end
59
62
  true
60
63
  end
@@ -67,14 +67,14 @@ class SemanticLogger::Appender::SplunkHttp < SemanticLogger::Appender::Http
67
67
  # Proc: Only include log messages where the supplied Proc returns true
68
68
  # The Proc must return true or false.
69
69
  def initialize(token: nil, source_type: nil, index: nil,
70
- url:, compress: true, ssl: {}, open_timeout: 2.0, read_timeout: 1.0, continue_timeout: 1.0,
71
- level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
70
+ url:, compress: true, ssl: {}, open_timeout: 2.0, read_timeout: 1.0, continue_timeout: 1.0,
71
+ level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
72
72
 
73
- @source_type = source_type
74
- @index = index
73
+ @source_type = source_type
74
+ @index = index
75
75
 
76
- super(url: url, compress: compress, ssl: ssl, open_timeout: 2.0, read_timeout: open_timeout, continue_timeout: continue_timeout,
77
- level: level, formatter: formatter, filter: filter, application: application, host: host, &block)
76
+ super(url: url, compress: compress, ssl: ssl, open_timeout: 2.0, read_timeout: open_timeout, continue_timeout: continue_timeout,
77
+ level: level, formatter: formatter, filter: filter, application: application, host: host, &block)
78
78
 
79
79
  # Put splunk auth token in the header of every HTTP post.
80
80
  @header['Authorization'] = "Splunk #{token}"
@@ -120,9 +120,9 @@ module SemanticLogger
120
120
  # # Change the warn level to LOG_NOTICE level instead of a the default of LOG_WARNING.
121
121
  # SemanticLogger.add_appender(appender: :syslog, level_map: {warn: ::Syslog::LOG_NOTICE})
122
122
  def initialize(url: 'syslog://localhost',
123
- facility: ::Syslog::LOG_USER, level_map: SemanticLogger::Formatters::Syslog::LevelMap.new, options: ::Syslog::LOG_PID|::Syslog::LOG_CONS,
124
- tcp_client: {},
125
- level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
123
+ facility: ::Syslog::LOG_USER, level_map: SemanticLogger::Formatters::Syslog::LevelMap.new, options: ::Syslog::LOG_PID|::Syslog::LOG_CONS,
124
+ tcp_client: {},
125
+ level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block)
126
126
 
127
127
  @options = options
128
128
  @facility = facility
@@ -182,11 +182,11 @@ module SemanticLogger
182
182
  # connect_retry_count: 5
183
183
  # )
184
184
  def initialize(server: nil, servers: nil, separator: "\n",
185
- policy: :ordered, buffered: true, #keepalive: true,
186
- connect_timeout: 10.0, read_timeout: 60.0, write_timeout: 60.0,
187
- connect_retry_count: 10, retry_count: 3, connect_retry_interval: 0.5, close_on_error: true,
188
- on_connect: nil, proxy_server: nil, ssl: nil,
189
- level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block
185
+ policy: :ordered, buffered: true, #keepalive: true,
186
+ connect_timeout: 10.0, read_timeout: 60.0, write_timeout: 60.0,
187
+ connect_retry_count: 10, retry_count: 3, connect_retry_interval: 0.5, close_on_error: true,
188
+ on_connect: nil, proxy_server: nil, ssl: nil,
189
+ level: nil, formatter: nil, filter: nil, application: nil, host: nil, &block
190
190
  )
191
191
  @separator = separator
192
192
  @options = {
@@ -326,7 +326,7 @@ module SemanticLogger
326
326
  if silence_level = params[:silence]
327
327
  # In case someone accidentally sets `silence: true` instead of `silence: :error`
328
328
  silence_level = :error if silence_level == true
329
- silence(silence_level) {yield(params)}
329
+ silence(silence_level) { yield(params) }
330
330
  else
331
331
  yield(params)
332
332
  end
@@ -193,7 +193,7 @@ module SemanticLogger
193
193
  # Not all appenders implement reopen.
194
194
  # Check the code for each appender you are using before relying on this behavior.
195
195
  def self.reopen
196
- @appenders.each {|appender| appender.reopen if appender.respond_to?(:reopen)}
196
+ @appenders.each { |appender| appender.reopen if appender.respond_to?(:reopen) }
197
197
  # After a fork the appender thread is not running, start it if it is not running.
198
198
  SemanticLogger::Processor.start
199
199
  end
@@ -407,7 +407,7 @@ module SemanticLogger
407
407
  def self.named_tags
408
408
  if (list = Thread.current[:semantic_logger_named_tags]) && !list.empty?
409
409
  if list.size > 1
410
- list.reduce({}) {|sum, h| sum.merge(h)}
410
+ list.reduce({}) { |sum, h| sum.merge(h) }
411
411
  else
412
412
  list.first.clone
413
413
  end
@@ -1,3 +1,3 @@
1
1
  module SemanticLogger #:nodoc
2
- VERSION = '4.1.0'
2
+ VERSION = '4.1.1'
3
3
  end
@@ -8,7 +8,7 @@ module Appender
8
8
  skip('Concurrent::TimerTask issue is preventing the process from stopping.') if defined? JRuby
9
9
  Elasticsearch::Transport::Client.stub_any_instance(:bulk, true) do
10
10
  @appender = SemanticLogger::Appender::Elasticsearch.new(
11
- url: 'http://localhost:9200',
11
+ url: 'http://localhost:9200',
12
12
  batch_size: 1 # immediate flush
13
13
  )
14
14
  end
@@ -21,7 +21,7 @@ module Appender
21
21
 
22
22
  it 'logs to daily indexes' do
23
23
  index = nil
24
- @appender.stub(:enqueue, ->(ind, json){ index = ind['index']['_index'] } ) do
24
+ @appender.stub(:enqueue, ->(ind, json) { index = ind['index']['_index'] }) do
25
25
  @appender.info @message
26
26
  end
27
27
  assert_equal "semantic_logger-#{Time.now.strftime('%Y.%m.%d')}", index
@@ -30,7 +30,7 @@ module Appender
30
30
  SemanticLogger::LEVELS.each do |level|
31
31
  it "send #{level}" do
32
32
  request = nil
33
- @appender.client.stub(:bulk, -> r { request = r; {"status" => 201 } }) do
33
+ @appender.client.stub(:bulk, -> r { request = r; {"status" => 201} }) do
34
34
  @appender.send(level, @message)
35
35
  end
36
36
 
@@ -47,7 +47,7 @@ module Appender
47
47
  exc = e
48
48
  end
49
49
  request = nil
50
- @appender.client.stub(:bulk, -> r { request = r; {"status" => 201 } }) do
50
+ @appender.client.stub(:bulk, -> r { request = r; {"status" => 201} }) do
51
51
  @appender.send(level, 'Reading File', exc)
52
52
  end
53
53
 
@@ -63,7 +63,7 @@ module Appender
63
63
 
64
64
  it "sends #{level} custom attributes" do
65
65
  request = nil
66
- @appender.client.stub(:bulk, -> r { request = r; {"status" => 201 } }) do
66
+ @appender.client.stub(:bulk, -> r { request = r; {"status" => 201} }) do
67
67
  @appender.send(level, @message, {key1: 1, key2: 'a'})
68
68
  end
69
69
 
@@ -1,6 +1,6 @@
1
1
  require_relative '../test_helper'
2
2
 
3
- # Unit Test for SemanticLogger::Appender::Bugsnag
3
+ # Unit Test for SemanticLogger::Appender::Sentry
4
4
  module Appender
5
5
  class SentryTest < Minitest::Test
6
6
  describe SemanticLogger::Appender::Sentry do
@@ -16,16 +16,16 @@ module Appender
16
16
  Raven.stub(:capture_message, -> msg, h { error_message = msg; hash = h }) do
17
17
  @appender.send(level, @message)
18
18
  end
19
- assert_equal @message, hash[:error_message]
20
- assert_equal 'SemanticLogger::Appender::Sentry', hash[:error_class]
19
+ assert_equal @message, error_message
20
+ assert_equal 'SemanticLogger::Appender::Sentry', hash[:extra][:name]
21
21
 
22
22
  if [:error, :fatal].include?(level)
23
- assert hash.has_key?(:backtrace)
23
+ assert hash[:extra].has_key?(:backtrace)
24
24
  else
25
- refute hash.has_key?(:backtrace)
25
+ refute hash[:extra].has_key?(:backtrace)
26
26
  end
27
27
  assert_equal true, hash.has_key?(:extra)
28
- assert_equal level, hash[:extra][:level]
28
+ assert_equal level, hash[:level]
29
29
  end
30
30
 
31
31
  it "sends #{level} exceptions" do
@@ -90,7 +90,7 @@ module SemanticLogger
90
90
 
91
91
  it 'logs short duration' do
92
92
  log.duration = 1.34567
93
- duration = SemanticLogger::Formatters::Base::PRECISION == 3 ? "(#{bold}1ms#{clear})" : "(#{bold}1.346ms#{clear})"
93
+ duration = SemanticLogger::Formatters::Base::PRECISION == 3 ? "(#{bold}1ms#{clear})" : "(#{bold}1.346ms#{clear})"
94
94
  assert_equal duration, formatter.duration
95
95
  end
96
96
  end
@@ -143,7 +143,7 @@ module SemanticLogger
143
143
  log.backtrace = backtrace
144
144
  set_exception
145
145
  duration = SemanticLogger::Formatters::Base::PRECISION == 3 ? '1' : '1.346'
146
- str = "#{expected_time} #{color}D#{clear} [#{$$}:#{Thread.current.name} default_test.rb:35] [#{color}first#{clear}] [#{color}second#{clear}] [#{color}third#{clear}] {#{color}first: 1#{clear}, #{color}second: 2#{clear}, #{color}third: 3#{clear}} (#{bold}#{duration}ms#{clear}) #{color}ColorTest#{clear} -- Hello World -- #{{:first => 1, :second => 2, :third => 3}.ai(multiline: false)} -- Exception: #{color}RuntimeError: Oh no#{clear}\n"
146
+ str = "#{expected_time} #{color}D#{clear} [#{$$}:#{Thread.current.name} default_test.rb:35] [#{color}first#{clear}] [#{color}second#{clear}] [#{color}third#{clear}] {#{color}first: 1#{clear}, #{color}second: 2#{clear}, #{color}third: 3#{clear}} (#{bold}#{duration}ms#{clear}) #{color}ColorTest#{clear} -- Hello World -- #{{:first => 1, :second => 2, :third => 3}.ai(multiline: false)} -- Exception: #{color}RuntimeError: Oh no#{clear}\n"
147
147
  assert_equal str, formatter.call(log, nil).lines.first
148
148
  end
149
149
  end
@@ -102,7 +102,7 @@ module SemanticLogger
102
102
 
103
103
  it 'logs short duration' do
104
104
  log.duration = 1.34567
105
- duration = SemanticLogger::Formatters::Base::PRECISION == 3 ? "(1ms)" : "(1.346ms)"
105
+ duration = SemanticLogger::Formatters::Base::PRECISION == 3 ? "(1ms)" : "(1.346ms)"
106
106
  assert_equal duration, formatter.duration
107
107
  end
108
108
  end
@@ -165,7 +165,7 @@ module SemanticLogger
165
165
  log.backtrace = backtrace
166
166
  set_exception
167
167
  duration = SemanticLogger::Formatters::Base::PRECISION == 3 ? '1' : '1.346'
168
- str = "#{expected_time} D [#{$$}:#{Thread.current.name} default_test.rb:99] [first] [second] [third] {first: 1, second: 2, third: 3} (#{duration}ms) DefaultTest -- Hello World -- {:first=>1, :second=>2, :third=>3} -- Exception: RuntimeError: Oh no\n"
168
+ str = "#{expected_time} D [#{$$}:#{Thread.current.name} default_test.rb:99] [first] [second] [third] {first: 1, second: 2, third: 3} (#{duration}ms) DefaultTest -- Hello World -- {:first=>1, :second=>2, :third=>3} -- Exception: RuntimeError: Oh no\n"
169
169
  assert_equal str, formatter.call(log, nil).lines.first
170
170
  end
171
171
  end
@@ -13,11 +13,3 @@ require_relative 'mock_logger'
13
13
  require 'awesome_print'
14
14
 
15
15
  #Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
16
- Signal.trap('TTIN') do
17
- Thread.list.each do |thread|
18
- puts
19
- puts
20
- ap thread.name
21
- ap thread.backtrace
22
- end
23
- end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: semantic_logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.0
4
+ version: 4.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reid Morrison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-09 00:00:00.000000000 Z
11
+ date: 2017-05-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby