slack_log_device 2.1.3 → 2.2.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
  SHA1:
3
- metadata.gz: 466a2f36071f7d51ec258e3034890b2bf434367b
4
- data.tar.gz: fb58589a94ba4f6711775065c747d793b506361e
3
+ metadata.gz: 825e9f635d6d804f3b3221de1bc7c6f2e8f75702
4
+ data.tar.gz: 4ec127d12b83a824df28e0ed50c979f5dc71049c
5
5
  SHA512:
6
- metadata.gz: 467fd9a2582e93b20d8cdf746a99d96dfc3fabfe906a6984ea56048973836ce8719a64852ca3cf6bfeef903103f9de4ac8632f463930ec9ade7946ad7814266a
7
- data.tar.gz: 91e38b5d3f0666e0d675bde99bb59e6bacac0304f930ad5c0fdd5ea1207485d8fa85525faaeb9f5337e9706ec37c5e631d1d64e1509f0369e1a0d18962211dd8
6
+ metadata.gz: 2d42f60c686262a582f5b346f0fa46df4129beaa6cf391ee6fe7e76c776e6f854f4b37c6ac52eee7d79b82656dda1947fa5b63e061c70a68086457207a6ff31e
7
+ data.tar.gz: 9746e95b665bc59d0dd0db446bc794163e99d755d6274e213b26b73eb8d84bdcf3edc88522e3a95bb5c4f6d4d5ff8c84756804e7155f0e3db3bb4561bfcffe7e
data/README.mdown CHANGED
@@ -40,6 +40,15 @@ starting with a `@`).
40
40
  - `username`: The username to post message as (nil by default).
41
41
  - `webhook_url`: The URL of the webhook (mandatory).
42
42
 
43
+ ## Formatter
44
+
45
+ `slack_log_device` provides a log formatter to have a pretty output for slack.
46
+ It can be configured like this:
47
+
48
+ ```ruby
49
+ logger.formatter = SlackLogDevice::FORMATTER
50
+ ```
51
+
43
52
  ## Rails configuration
44
53
 
45
54
  For a rails application, it is recommanded to use following configuration into
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.3
1
+ 2.2.0
@@ -6,6 +6,21 @@ require 'logger'
6
6
 
7
7
  class SlackLogDevice
8
8
 
9
+ FORMATTER = -> (severity, datetime, progname, message) do
10
+ text = "*`#{severity}`*"
11
+ text << " (*#{progname}*)" if progname.present?
12
+ text << ': '
13
+ if message.is_a?(Exception)
14
+ text << "A `#{message.class}` occurred: #{message.message}\n\n```"
15
+ backtrace = message.backtrace.join("\n")
16
+ backtrace = backtrace[0, MAX_MESSAGE_LENGTH - 7 - text.size] << "\n..." if backtrace.size > MAX_MESSAGE_LENGTH - 3
17
+ text << backtrace << '```'
18
+ else
19
+ text << message
20
+ end
21
+ end
22
+ MAX_MESSAGE_LENGTH = 4000
23
+
9
24
  attr_reader :channel, :flush_delay, :max_buffer_size, :timeout, :username, :webhook_url
10
25
 
11
26
  def initialize(options = {})
@@ -59,7 +74,7 @@ class SlackLogDevice
59
74
  end
60
75
 
61
76
  def flush?
62
- auto_flush? || flush_delay.zero? || @buffer.join("\n").size > max_buffer_size
77
+ auto_flush? || flush_delay.zero? || @buffer.join("\n").bytesize > max_buffer_size
63
78
  end
64
79
 
65
80
  def flush_delay=(value)
@@ -13,6 +13,50 @@ describe SlackLogDevice do
13
13
  expect(device).not_to be_a(Logger::LogDevice)
14
14
  end
15
15
 
16
+ describe '::FORMATTER' do
17
+
18
+ let(:formatter) { SlackLogDevice::FORMATTER }
19
+
20
+ it 'returns a proc' do
21
+ expect(formatter).to be_a(Proc)
22
+ end
23
+
24
+ describe '#call' do
25
+
26
+ it 'returns a formatted message' do
27
+ expect(formatter.call('DEBUG', Time.now, ' ', 'Hello World')).to eq('*`DEBUG`*: Hello World')
28
+ end
29
+
30
+ it 'includes progname if given' do
31
+ expect(formatter.call('DEBUG', Time.now, 'My App', 'Hello World')).to eq('*`DEBUG`* (*My App*): Hello World')
32
+ end
33
+
34
+ it 'formats exception' do
35
+ exception = RuntimeError.new('BAM!')
36
+ exception.set_backtrace(['foo', 'bar'])
37
+ expect(formatter.call('DEBUG', Time.now, nil, exception)).to eq("*`DEBUG`*: A `RuntimeError` occurred: BAM!\n\n```foo\nbar```")
38
+ end
39
+
40
+ it 'message with trace never exceed 4000 chars' do
41
+ exception = RuntimeError.new('BAM!')
42
+ exception.set_backtrace(['a' * 4500])
43
+ message = formatter.call('DEBUG', Time.now, 'My App', exception)
44
+ expect(message.size).to eq(4000)
45
+ expect(message).to end_with("aaaaaa\n...```")
46
+ end
47
+
48
+ it 'can be exactly 4000 chars (without three dots)' do
49
+ exception = RuntimeError.new('BAM!')
50
+ exception.set_backtrace(['a' * 3950])
51
+ message = formatter.call('DEBUG', Time.now, nil, exception)
52
+ expect(message).to end_with('a```')
53
+ expect(message.size).to eq(4000)
54
+ end
55
+
56
+ end
57
+
58
+ end
59
+
16
60
  describe '#auto_flush?' do
17
61
 
18
62
  it 'is false by default' do
@@ -159,6 +203,14 @@ describe SlackLogDevice do
159
203
  }.to change { device.flush? }.from(false).to(true)
160
204
  end
161
205
 
206
+ it 'use byte size to compare max_buffer_size' do
207
+ options[:max_buffer_size] = 10
208
+ device.write('0123456é')
209
+ expect {
210
+ device.instance_variable_get(:@buffer).push('a')
211
+ }.to change { device.flush? }.from(false).to(true)
212
+ end
213
+
162
214
  it 'is true if auto_flush option is present' do
163
215
  expect {
164
216
  device.auto_flush = true
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack_log_device
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.3
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexis Toulotte