semantic_logger 4.1.0 → 4.1.1

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
  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