semantic_logger 2.20.0 → 2.21.0

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: 141016c8a502a158974b0dfe589a90b5cd650826
4
- data.tar.gz: 09cb7afdf37afe6280098b01f7257c8a21b5995e
3
+ metadata.gz: 7835135546f3ebf18ce484c594cd52fef0d4ecee
4
+ data.tar.gz: 12cd7ddcbf431f070a0b57792ad436f100aca649
5
5
  SHA512:
6
- metadata.gz: 3f734075af2a306b37560903beb0d0003f912706f6d68446914832cbb76a404c7017dd536c587eb155309a1128ebf328719f33c727b0ca129d03d2bea8f6fa21
7
- data.tar.gz: a96ffd5c36c47e4e7787dc53970dafe092203f6e717f6aba4289217b45e14b1e36317151dcbe2af60178e78d3266ed92f23bd3f7ba6c39d1592d5fbd37794458
6
+ metadata.gz: cfb139be7ea5cb63d9787638e4e2e2bc464c8bd0bf49f60a9447b4b2b28033e66de8766c8c5b648e544d8bd3068813765d13cee9275130f2823416881e20bfde
7
+ data.tar.gz: 92e4e1fc6e445696c04596f4f12839d6504d32a62df005baa83e82adb2b4ed4343b9a808193104bfd615ac159ceab7631e5cb36e70457c265efb6de1cb475e18
@@ -1,3 +1,9 @@
1
+ # Load AwesomePrint if available
2
+ begin
3
+ require 'awesome_print'
4
+ rescue LoadError
5
+ end
6
+
1
7
  # Base appender
2
8
  #
3
9
  # Abstract base class for appenders
@@ -108,6 +108,15 @@ module SemanticLogger
108
108
  end
109
109
  end
110
110
 
111
+ # If the tag being supplied is definitely a string then this fast
112
+ # tag api can be used for short lived tags
113
+ def fast_tag(tag)
114
+ (Thread.current[:semantic_logger_tags] ||= []) << tag
115
+ yield
116
+ ensure
117
+ Thread.current[:semantic_logger_tags].pop
118
+ end
119
+
111
120
  # Add the supplied tags to the list of tags to log for this thread whilst
112
121
  # the supplied block is active
113
122
  # Returns nil if no tags are currently set
@@ -290,7 +299,7 @@ module SemanticLogger
290
299
  end
291
300
 
292
301
  # Log message at the specified level
293
- def log_internal(level, index, message=nil, payload=nil, exception=nil, &block)
302
+ def log_internal(level, index, message=nil, payload=nil, exception=nil)
294
303
  # Detect exception being logged
295
304
  if exception.nil? && payload.nil? && message.kind_of?(Exception)
296
305
  exception = message
@@ -303,7 +312,7 @@ module SemanticLogger
303
312
  end
304
313
 
305
314
  # Add result of block as message or payload if not nil
306
- if block && (result = block.call)
315
+ if block_given? && (result = yield)
307
316
  if result.is_a?(String)
308
317
  message = message.nil? ? result : "#{message} -- #{result}"
309
318
  elsif payload && payload.respond_to?(:merge)
@@ -320,7 +329,7 @@ module SemanticLogger
320
329
 
321
330
  # Add caller stack trace
322
331
  backtrace =
323
- if !exception && (index >= SemanticLogger.backtrace_level_index)
332
+ if index >= SemanticLogger.backtrace_level_index
324
333
  trace = caller
325
334
  # Remove call to this internal method
326
335
  trace.shift(1)
@@ -332,18 +341,18 @@ module SemanticLogger
332
341
  end
333
342
 
334
343
  # Measure the supplied block and log the message
335
- def benchmark_internal(level, index, message, params, &block)
344
+ def benchmark_internal(level, index, message, params)
336
345
  start = Time.now
337
346
  exception = nil
338
347
  begin
339
- if block
348
+ if block_given?
340
349
  result =
341
350
  if silence_level = params[:silence]
342
351
  # In case someone accidentally sets `silence: true` instead of `silence: :error`
343
352
  silence_level = :error if silence_level == true
344
- silence(silence_level) { block.call(params) }
353
+ silence(silence_level) { yield(params) }
345
354
  else
346
- block.call(params)
355
+ yield(params)
347
356
  end
348
357
  exception = params[:exception]
349
358
  result
@@ -43,14 +43,14 @@ module SemanticLogger
43
43
 
44
44
  MAX_EXCEPTIONS_TO_UNWRAP = 5
45
45
  # Call the block for exception and any nested exception
46
- def each_exception(&block)
46
+ def each_exception
47
47
  # With thanks to https://github.com/bugsnag/bugsnag-ruby/blob/6348306e44323eee347896843d16c690cd7c4362/lib/bugsnag/notification.rb#L81
48
48
  depth = 0
49
49
  exceptions = []
50
50
  ex = exception
51
51
  while ex != nil && !exceptions.include?(ex) && exceptions.length < MAX_EXCEPTIONS_TO_UNWRAP
52
52
  exceptions << ex
53
- block.call(ex, depth)
53
+ yield(ex, depth)
54
54
 
55
55
  depth += 1
56
56
  ex =
@@ -1,3 +1,3 @@
1
1
  module SemanticLogger #:nodoc
2
- VERSION = '2.20.0'
2
+ VERSION = '2.21.0'
3
3
  end
data/test/logger_test.rb CHANGED
@@ -64,7 +64,7 @@ class LoggerTest < Minitest::Test
64
64
  end
65
65
  end
66
66
 
67
- it "logs #{level} info with backtrace" do
67
+ it 'logs with backtrace' do
68
68
  SemanticLogger.stub(:backtrace_level_index, 0) do
69
69
  @logger.send(level, 'hello world', @hash) { 'Calculations' }
70
70
  SemanticLogger.flush
@@ -72,10 +72,34 @@ class LoggerTest < Minitest::Test
72
72
  end
73
73
  end
74
74
 
75
+ it 'logs with backtrace and exception' do
76
+ SemanticLogger.stub(:backtrace_level_index, 0) do
77
+ exc = RuntimeError.new("Test")
78
+ @logger.send(level, 'hello world', exc)
79
+ SemanticLogger.flush
80
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}#{@file_name_reg_exp}\] LoggerTest -- hello world -- Exception: RuntimeError: Test/, @mock_logger.message
81
+ end
82
+ end
83
+
84
+ it 'logs payload' do
85
+ hash = {tracking_number: '123456', even: 2, more: 'data'}
86
+ hash_str = hash.inspect.sub('{', '\{').sub('}', '\}')
87
+ @logger.send(level, 'Hello world', hash)
88
+ SemanticLogger.flush
89
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] LoggerTest -- Hello world -- #{hash_str}/, @mock_logger.message
90
+ end
91
+
92
+ it 'does not log an empty payload' do
93
+ hash = {}
94
+ @logger.send(level, 'Hello world', hash)
95
+ SemanticLogger.flush
96
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] LoggerTest -- Hello world/, @mock_logger.message
97
+ end
98
+
75
99
  end
76
100
  end
77
101
 
78
- describe 'tagged logging' do
102
+ describe '#tagged' do
79
103
  it 'add tags to log entries' do
80
104
  @logger.tagged('12345', 'DJHSFK') do
81
105
  @logger.info('Hello world')
@@ -96,7 +120,9 @@ class LoggerTest < Minitest::Test
96
120
  assert_equal 'tags', @logger.tags.last
97
121
  end
98
122
  end
123
+ end
99
124
 
125
+ describe '#with_payload' do
100
126
  it 'logs tagged payload' do
101
127
  hash = {tracking_number: "123456", even: 2, more: "data"}
102
128
  hash_str = hash.inspect.sub("{", "\\{").sub("}", "\\}")
@@ -108,24 +134,19 @@ class LoggerTest < Minitest::Test
108
134
  end
109
135
  end
110
136
  end
137
+ end
111
138
 
112
- it 'logs payload' do
113
- hash = {tracking_number: "123456", even: 2, more: "data"}
114
- hash_str = hash.inspect.sub("{", "\\{").sub("}", "\\}")
115
- @logger.info('Hello world', hash)
116
- SemanticLogger.flush
117
- assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ I \[\d+:#{@thread_name}\] LoggerTest -- Hello world -- #{hash_str}/, @mock_logger.message
118
- end
119
-
120
- it 'does not log an empty payload' do
121
- hash = {}
122
- @logger.info('Hello world', hash)
123
- SemanticLogger.flush
124
- assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ I \[\d+:#{@thread_name}\] LoggerTest -- Hello world/, @mock_logger.message
139
+ describe '#fast_tag' do
140
+ it 'add string tag to log entries' do
141
+ @logger.fast_tag('12345') do
142
+ @logger.info('Hello world')
143
+ SemanticLogger.flush
144
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ I \[\d+:#{@thread_name}\] \[12345\] LoggerTest -- Hello world/, @mock_logger.message
145
+ end
125
146
  end
126
147
  end
127
148
 
128
- describe 'Ruby Logger' do
149
+ describe 'Ruby Logger level' do
129
150
  # Ensure that any log level can be logged
130
151
  Logger::Severity.constants.each do |level|
131
152
  it "log Ruby logger #{level} info" do
data/test/mock_logger.rb CHANGED
@@ -5,11 +5,11 @@ class MockLogger
5
5
 
6
6
  Logger::Severity.constants.each do |level|
7
7
  class_eval <<-EOT, __FILE__, __LINE__
8
- def #{level.downcase}(message = nil, progname = nil, &block)
8
+ def #{level.downcase}(message = nil, progname = nil)
9
9
  if message
10
10
  self.message = message
11
- elsif block
12
- self.message = block.call
11
+ elsif block_given?
12
+ self.message = yield
13
13
  else
14
14
  self.message = progname
15
15
  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: 2.20.0
4
+ version: 2.21.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Reid Morrison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-09 00:00:00.000000000 Z
11
+ date: 2015-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -86,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
86
86
  version: '0'
87
87
  requirements: []
88
88
  rubyforge_project:
89
- rubygems_version: 2.4.5.1
89
+ rubygems_version: 2.4.8
90
90
  signing_key:
91
91
  specification_version: 4
92
92
  summary: Scalable, next generation enterprise logging for Ruby