logstash-logger 0.8.0 → 0.9.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: 226fca630b4975188d705c7a09a96f48d8fe7f3b
4
- data.tar.gz: f898f4f314c038719ce689f1e9a63c4f4679bbd9
3
+ metadata.gz: 84c02ef7b86b7f3bbd3342b9978e6b172f9705ee
4
+ data.tar.gz: fb9fe50daa68b2c7f441b21816500baeb9c7e081
5
5
  SHA512:
6
- metadata.gz: ef10037612a82b594afbd20b6349daf16d2803dc519a199be08dc499d264e5106f162e8668b0d689d11bc9b8e5a8d4256fc7ace7a9a176975c8459d508bb5317
7
- data.tar.gz: b55942ec2be01e35b92c557472b772ca08504ad11460ff204c49c26491567a1b29b8acf50bc1c52cd2cadd30775024a01db88b90325480913c59560aacad5a14
6
+ metadata.gz: e759b59bb77b80ab16c15c99a22e33d33d81af4e151eaacd722fb6cf69648161f4e0053a5c54f97938a71c08dc63482e4ac5849fbf43854ca23be1520f8de8bd
7
+ data.tar.gz: 0da0fe1fd184fc8ddbe7ebb9a16c103496a9b8d9add08a1428ba707bcb794c87429fabce1a896e83d89b92452f467ccc9fd7b93fe7a6cfccbb76298a6ab73319
@@ -1,3 +1,8 @@
1
+ ## 0.9.0
2
+ - Support for customizing the fields on all logged messages via configuration.
3
+ Fixes [#32](https://github.com/dwbutler/logstash-logger/pull/32).
4
+ Thanks [Chris Blatchley](https://github.com/chrisblatchley)!
5
+
1
6
  ## 0.8.0
2
7
  - Support for logging to stderr. Fixes [#24](https://github.com/dwbutler/logstash-logger/pull/25).
3
8
  Thanks [Jan Schulte](https://github.com/schultyy)!
data/README.md CHANGED
@@ -76,11 +76,11 @@ such as Heroku where you may want to read configuration values from the environm
76
76
  is `type://host:port/path`. Some sample URI configurations are given below.
77
77
 
78
78
  ```
79
- udp://localhost:5228
80
- tcp://localhost:5229
79
+ udp://localhost:5228
80
+ tcp://localhost:5229
81
81
  unix:///tmp/socket
82
- file:///path/to/file
83
- redis://localhost:6379
82
+ file:///path/to/file
83
+ redis://localhost:6379
84
84
  stdout:/
85
85
  stderr:/
86
86
  ```
@@ -143,6 +143,44 @@ input {
143
143
  }
144
144
  ```
145
145
 
146
+ ## Custom Log Fields
147
+
148
+ `LogStashLogger` by default will log a JSON object with the format below.
149
+
150
+ ```json
151
+ {
152
+ "message":"Some Message",
153
+ "@timestamp":"2015-01-29T10:43:32.196-05:00",
154
+ "@version":"1",
155
+ "severity":"INFO",
156
+ "host":"hostname"
157
+ }
158
+ ```
159
+
160
+ Some applications may need to attach additional metadata to each message.
161
+ The `LogStash::Event` can be manipulated directly by specifying a `customize_event` block in the `LogStashLogger` configuration.
162
+
163
+ ```ruby
164
+ config = LogStashLogger.configure do |config|
165
+ config.customize_event do |event|
166
+ event["other_field"] = "some_other_value"
167
+ end
168
+ end
169
+ ```
170
+
171
+ This configuration would result in the following output.
172
+
173
+ ```json
174
+ {
175
+ "message": "Some Message",
176
+ "@timestamp": "2015-01-29T10:43:32.196-05:00",
177
+ "@version": "1",
178
+ "severity": "INFO",
179
+ "host": "hostname",
180
+ "other_field": "some_other_value"
181
+ }
182
+ ```
183
+
146
184
  ## Rails Integration
147
185
 
148
186
  Verified to work with both Rails 3 and 4.
@@ -273,7 +311,7 @@ config.logstash = [
273
311
 
274
312
  Verified to work with:
275
313
 
276
- * MRI Ruby 1.9.3, 2.0+, 2.1+
314
+ * MRI Ruby 1.9.3, 2.0.x, 2.1.x, 2.2.x
277
315
  * JRuby 1.7+
278
316
  * Rubinius 2.2+
279
317
 
@@ -297,6 +335,18 @@ disadvantages of each type:
297
335
  For a more detailed discussion of UDP vs TCP, I recommend reading this article:
298
336
  [UDP vs. TCP](http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/)
299
337
 
338
+ ## Troubleshooting
339
+
340
+ ### JSON::GeneratorError
341
+ Your application is probably attempting to log data that is not encoded in a valid way. When this happens, Ruby's
342
+ standard JSON library will raise an exception. You may be able to overcome this by swapping out a different JSON encoder
343
+ such as Oj. Use the [oj_mimic_json](https://github.com/ohler55/oj_mimic_json) gem to use Oj for JSON generation.
344
+
345
+ ### No logs getting sent on Heroku
346
+ Heroku recommends installing the [rails_12factor](https://github.com/heroku/rails_12factor) so that logs get sent to STDOUT.
347
+ Unfortunately, this overrides LogStashLogger, preventing logs from being sent to their configured destination. The solution
348
+ is to remove `rails_12factor` from your Gemfile.
349
+
300
350
  ## Breaking changes
301
351
 
302
352
  ### Version 0.5+
@@ -328,6 +378,7 @@ logger = LogStashLogger.new('localhost', 5228, :tcp)
328
378
  * [Arron Mabrey](https://github.com/arronmabrey)
329
379
  * [Jan Schulte](https://github.com/schultyy)
330
380
  * [Kurt Preston](https://github.com/KurtPreston)
381
+ * [Chris Blatchley](https://github.com/chrisblatchley)
331
382
 
332
383
  ## Contributing
333
384
 
@@ -6,5 +6,6 @@ require 'logstash-logger/device'
6
6
 
7
7
  require 'logstash-logger/logger'
8
8
  require 'logstash-logger/formatter'
9
+ require 'logstash-logger/configuration'
9
10
 
10
11
  require 'logstash-logger/railtie' if defined? Rails
@@ -0,0 +1,26 @@
1
+ module LogStashLogger
2
+ class << self
3
+ def configure(&block)
4
+ @configuration = Configuration.new(&block) if block_given? || @configuration.nil?
5
+ @configuration
6
+ end
7
+
8
+ alias :configuration :configure
9
+ end
10
+
11
+ class Configuration
12
+ attr_accessor :customize_event_block
13
+
14
+ def initialize(*args)
15
+ @customize_event_block = nil
16
+
17
+ yield self if block_given?
18
+ self
19
+ end
20
+
21
+ def customize_event(&block)
22
+ @customize_event_block = block
23
+ end
24
+
25
+ end
26
+ end
@@ -36,6 +36,8 @@ module LogStashLogger
36
36
 
37
37
  event['host'] ||= HOST
38
38
 
39
+ LogStashLogger.configuration.customize_event_block.call(event) if LogStashLogger.configuration.customize_event_block.respond_to?(:call)
40
+
39
41
  current_tags.each do |tag|
40
42
  event.tag(tag)
41
43
  end
@@ -1,3 +1,3 @@
1
1
  module LogStashLogger
2
- VERSION = "0.8.0"
2
+ VERSION = "0.9.0"
3
3
  end
@@ -0,0 +1,27 @@
1
+ require 'logstash-logger'
2
+
3
+ describe LogStashLogger do
4
+ describe "#configure" do
5
+ it 'auto initializes' do
6
+ config = LogStashLogger.configure
7
+ expect(config).to be_a LogStashLogger::Configuration
8
+ expect(LogStashLogger.configuration).to eq(config)
9
+ end
10
+
11
+ describe LogStashLogger::Configuration do
12
+ describe "#customize_event" do
13
+ it 'allows each LogStash::Event to be customized' do
14
+ config = LogStashLogger.configure do |config|
15
+ config.customize_event do |event|
16
+ event["test1"] = "response1"
17
+ end
18
+ end
19
+
20
+ event = LogStash::Event.new({})
21
+ config.customize_event_block.call(event)
22
+ expect(event["test1"]).to eq("response1")
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -54,27 +54,14 @@ describe LogStashLogger do
54
54
 
55
55
  it 'takes a string message as input and writes a logstash event' do
56
56
  message = 'test'
57
-
58
- expect(logdev).to receive(:write).and_call_original do |event|
59
- expect(event).to be_a LogStash::Event
60
- expect(event.host).to eql(hostname)
61
- expect(event['message']).to eql(message)
62
- expect(event['severity']).to eql('INFO')
63
- end
64
-
65
57
  logger.info(message)
66
58
 
59
+ expect(listener_event['severity']).to eql('INFO')
67
60
  expect(listener_event['message']).to eq(message)
68
61
  expect(listener_event['host']).to eq(hostname)
69
62
  end
70
63
 
71
64
  it 'takes a logstash-formatted json string as input and writes out a logstash event' do
72
- expect(logdev).to receive(:write).and_call_original do |event|
73
- expect(event).to be_a LogStash::Event
74
- expect(event['message']).to eql(logstash_event['message'])
75
- expect(event.host).to eql(hostname)
76
- end
77
-
78
65
  logger.info(logstash_event.to_json)
79
66
 
80
67
  expect(listener_event['message']).to eq(logstash_event['message'])
@@ -82,18 +69,11 @@ describe LogStashLogger do
82
69
  end
83
70
 
84
71
  it 'takes a LogStash::Event as input and writes it out intact' do
85
- expect(logdev).to receive(:write).and_call_original do |event|
86
- expect(event).to be_a LogStash::Event
87
- expect(event['message']).to eql(logstash_event['message'])
88
- expect(event['severity']).to eql(logstash_event['severity'])
89
- expect(event.timestamp).to eql(logstash_event.timestamp)
90
- expect(event.host).to eql(hostname)
91
- end
92
-
93
72
  logger.warn(logstash_event)
94
73
 
95
74
  expect(listener_event['message']).to eq(logstash_event['message'])
96
75
  expect(listener_event['severity']).to eq(logstash_event['severity'])
76
+ expect(listener_event['@timestamp'].iso8601).to eq(logstash_event.timestamp.iso8601)
97
77
  expect(listener_event['host']).to eq(hostname)
98
78
  end
99
79
 
@@ -104,14 +84,6 @@ describe LogStashLogger do
104
84
  'foo' => 'bar'
105
85
  }
106
86
 
107
- expect(logdev).to receive(:write).and_call_original do |event|
108
- expect(event).to be_a LogStash::Event
109
- expect(event['message']).to eql('test')
110
- expect(event['severity']).to eql('INFO')
111
- expect(event['foo']).to eql('bar')
112
- expect(event.host).to eql(hostname)
113
- end
114
-
115
87
  logger.info(data.dup)
116
88
 
117
89
  expect(listener_event['message']).to eq(data["message"])
@@ -124,16 +96,23 @@ describe LogStashLogger do
124
96
  it 'takes any object as input and writes a logstash event' do
125
97
  message = Time.now
126
98
 
127
- expect(logdev).to receive(:write).and_call_original do |event|
128
- expect(event).to be_a LogStash::Event
129
- expect(event.host).to eql(hostname)
130
- expect(event['message']).to eql(message.inspect)
131
- expect(event['severity']).to eql('INFO')
132
- end
133
-
134
99
  logger.info(message)
135
100
 
136
101
  expect(listener_event['message']).to eq(message.inspect)
102
+ expect(listener_event['host']).to eq(hostname)
103
+ expect(listener_event['severity']).to eq('INFO')
104
+ end
105
+
106
+ it 'allows event to be customized via configuration' do
107
+ LogStashLogger.configure do |config|
108
+ config.customize_event do |event|
109
+ event["test1"] = "response1"
110
+ end
111
+ end
112
+
113
+ logger.info("test")
114
+
115
+ expect(listener_event["test1"]).to eq("response1")
137
116
  end
138
117
 
139
118
  end
@@ -7,6 +7,12 @@ RSpec.configure do |config|
7
7
  puts "Testing with #{CONNECTION_TYPE.to_s.upcase} socket type"
8
8
  end
9
9
 
10
+ config.before(:each) do
11
+ LogStashLogger.configure do
12
+
13
+ end
14
+ end
15
+
10
16
  config.expect_with :rspec do |c|
11
17
  c.syntax = :expect
12
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Butler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-07 00:00:00.000000000 Z
11
+ date: 2015-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-event
@@ -157,6 +157,7 @@ files:
157
157
  - gemfiles/rails_4.1.gemfile
158
158
  - gemfiles/rails_4.2.gemfile
159
159
  - lib/logstash-logger.rb
160
+ - lib/logstash-logger/configuration.rb
160
161
  - lib/logstash-logger/device.rb
161
162
  - lib/logstash-logger/device/base.rb
162
163
  - lib/logstash-logger/device/connectable.rb
@@ -184,6 +185,7 @@ files:
184
185
  - samples/tcp.conf
185
186
  - samples/udp.conf
186
187
  - samples/unix.conf
188
+ - spec/configuration_spec.rb
187
189
  - spec/device/file_spec.rb
188
190
  - spec/device/io_spec.rb
189
191
  - spec/device/multi_delegator_spec.rb
@@ -219,11 +221,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
221
  version: '0'
220
222
  requirements: []
221
223
  rubyforge_project:
222
- rubygems_version: 2.4.5
224
+ rubygems_version: 2.2.2
223
225
  signing_key:
224
226
  specification_version: 4
225
227
  summary: LogStash Logger for ruby
226
228
  test_files:
229
+ - spec/configuration_spec.rb
227
230
  - spec/device/file_spec.rb
228
231
  - spec/device/io_spec.rb
229
232
  - spec/device/multi_delegator_spec.rb