logstash-logger 0.5.0 → 0.6.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: e6696816384e341e562b5cf39921a1f8d71accb0
4
- data.tar.gz: a510f56283c8a70101dd5604efa2b5470edb5f5f
3
+ metadata.gz: 6ce22d1b662dce1b8438a6760bc747a141e810b8
4
+ data.tar.gz: ec33c1bf4b20ebeb54271d5b307d77c6f3195c35
5
5
  SHA512:
6
- metadata.gz: a9b42b29215905770c72c3ad7ada65df908302a24e0389d636e0e7c3dbef631c06dfd57a304180adc5acdf3138ed81bb47ed9e8b465393a7c3130be107390892
7
- data.tar.gz: ce2711e17ef4ce503da02e1e9561f55b61525d4766bfefda2ba5a794418e990116351b3c57f25939e0bd9be58242cf3e5b68096b72dfeb5576e3267d890df1cc
6
+ metadata.gz: 8832f5370c049bfaa6ebe74f91ba716c42e43ad0d2b1d31a6fc2c0379005f18d9a0a2842271af50958c39488671d38986e271683df8c6d684c6a3077f6c2bfb9
7
+ data.tar.gz: fa9188fd5ff3e1e3585c112bb35258cd4dce9a141e208b3c6123dc91a5db54f0d0c54d682ced533d4f3516090d97666245ec9b301c978f0d4756526f4233c8bb
@@ -1,3 +1,10 @@
1
+ ## 0.6.0
2
+ - Support for logging to a file.
3
+ - Support for logging to a Redis list.
4
+ - Support for logging to a local Unix socket.
5
+ - Railtie supports file logger, using default log path and `config.autoflush_log` configuration.
6
+ - All `LogStashLogger` types now support a `sync` option, which controls if each message is automatically flushed.
7
+
1
8
  ## 0.5.0
2
9
  - Support for tagged logging. The interface was extracted from `ActiveSupport::TaggedLogging`
3
10
  and outputs to the `tags` key. (Thanks [pctj101](https://github.com/pctj101)!)
data/README.md CHANGED
@@ -7,10 +7,12 @@ writing to a file or syslog since logstash can receive the structured data direc
7
7
 
8
8
  ## Features
9
9
 
10
- * Writes directly to logstash over a UDP or TCP connection.
10
+ * Can write directly to logstash over a UDP or TCP/SSL connection.
11
+ * Can write to a file, Redis, a unix socket, or stdout.
11
12
  * Always writes in logstash JSON format.
12
- * Logger can take a string message, a hash, a LogStash::Event, or a logstash-formatted json string as input.
13
+ * Logger can take a string message, a hash, a `LogStash::Event`, or a JSON string as input.
13
14
  * Events are automatically populated with message, timestamp, host, and severity.
15
+ * Easily integrates with Rails via configuration.
14
16
 
15
17
  ## Installation
16
18
 
@@ -28,11 +30,6 @@ Or install it yourself as:
28
30
 
29
31
  ## Basic Usage
30
32
 
31
- First set up a logstash agent to receive input over a UDP or TCP port.
32
- Then in ruby, create a `LogStashLogger` that writes to that port.
33
-
34
- The logger accepts a string message, a JSON string, a hash, or a `LogStash::Event`.
35
-
36
33
  ```ruby
37
34
  require 'logstash-logger'
38
35
 
@@ -40,8 +37,13 @@ require 'logstash-logger'
40
37
  logger = LogStashLogger.new(port: 5228)
41
38
 
42
39
  # Specify host and type (UDP or TCP) explicitly
43
- udp_logger = LogStashLogger.new(host: 'localhost', port: 5228, type: :udp)
44
- tcp_logger = LogStashLogger.new(host: 'localhost', port: 5229, type: :tcp)
40
+ udp_logger = LogStashLogger.new(type: :udp, host: 'localhost', port: 5228)
41
+ tcp_logger = LogStashLogger.new(type: :tcp, host: 'localhost', port: 5229)
42
+
43
+ # Other types of loggers
44
+ file_logger = LogStashLogger.new(type: :file, path: 'log/development.log', sync: true)
45
+ unix_logger = LogStashLogger.new(type: :unix, path: '/tmp/sock')
46
+ redis_logger = LogStashLogger.new(type: :redis)
45
47
  stdout_logger = LogStashLogger.new(type: :stdout)
46
48
 
47
49
  # The following messages are written to UDP port 5228:
@@ -65,8 +67,9 @@ logger.tagged('foo') { logger.fatal('bar') }
65
67
 
66
68
  ## Logstash Configuration
67
69
 
68
- In order for Logstash to correctly receive and parse the event, you will need to
69
- configure and run a UDP listener that uses the `json_lines` codec:
70
+ In order for logstash to correctly receive and parse the events, you will need to
71
+ configure and run a listener that uses the `json_lines` codec. For example, to receive
72
+ events over UDP on port 5228:
70
73
 
71
74
  ```ruby
72
75
  input {
@@ -80,14 +83,6 @@ input {
80
83
 
81
84
  See the [samples](https://github.com/dwbutler/logstash-logger/tree/master/samples) directory for more configuration samples.
82
85
 
83
- ## UDP vs TCP
84
- Should you write to a UDP or TCP listener? It depends on your specific needs, but most applications should use the default (UDP).
85
-
86
- * UDP is faster because it's asynchronous (fire-and-forget). However, this means that log messages could get dropped. This is okay for most applications.
87
- * TCP verifies that every message has been received via two-way communication . This could slow your app down to a crawl if the TCP listener is under heavy load.
88
-
89
- For a more detailed discussion of UDP vs TCP, I recommend reading this article: [UDP vs. TCP](http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/)
90
-
91
86
  ## SSL
92
87
 
93
88
  If you are using TCP then there is the option of adding an SSL certificate to the options hash on initialize.
@@ -127,21 +122,82 @@ Verified to work with both Rails 3 and 4.
127
122
 
128
123
  Add the following to your `config/environments/production.rb`:
129
124
 
125
+ ### Common Options
126
+
127
+ ```ruby
128
+ # Optional, Rails sets the default to :info
129
+ config.log_level = :debug
130
+
131
+ # Optional, Rails 4 defaults to true in development and false in production
132
+ config.autoflush_log = true
133
+ ```
134
+
135
+ ### UDP
130
136
  ```ruby
131
137
  # Optional, defaults to '0.0.0.0'
132
138
  config.logstash.host = 'localhost'
133
139
 
134
- # Required for TCP/UDP
140
+ # Optional, defaults to :udp.
141
+ config.logstash.type = :udp
142
+
143
+ # Required, the port to connect to
135
144
  config.logstash.port = 5228
145
+ ```
136
146
 
137
- # Optional, defaults to :udp. Possible values are :udp, :tcp, or :stdout
138
- config.logstash.type = :udp
147
+ ### TCP
148
+
149
+ ```ruby
150
+ # Optional, defaults to '0.0.0.0'
151
+ config.logstash.host = 'localhost'
152
+
153
+ # Required, the port to connect to
154
+ config.logstash.port = 5228
155
+
156
+ # Required
157
+ config.logstash.type = :tcp
139
158
 
140
- # Optional, enables SSL when combined with :tcp type
159
+ # Optional, enables SSL
141
160
  config.logstash.ssl_enable = true
161
+ ```
142
162
 
143
- # Optional, Rails sets the default to :info
144
- config.log_level = :debug
163
+ ### Unix Socket
164
+
165
+ ```ruby
166
+ # Required
167
+ config.logstash.type = :unix
168
+
169
+ # Required
170
+ config.logstash.path = '/tmp/sock'
171
+ ```
172
+
173
+ ### Redis
174
+
175
+ ```ruby
176
+ # Required
177
+ config.logstash.type = :redis
178
+
179
+ # Optional, will default to the 'logstash' list
180
+ config.logstash.list = 'logstash'
181
+
182
+ # All other options are passed in to the Redis client
183
+ # Supported options include host, port, path, password, url
184
+ # Example:
185
+
186
+ # Optional, Redis will default to localhost
187
+ config.logstash.host = 'localhost'
188
+
189
+ # Optional, Redis will default to port 6379
190
+ config.logstash.port = 6379
191
+ ```
192
+
193
+ ### File
194
+
195
+ ```ruby
196
+ # Required
197
+ config.logstash.type = :file
198
+
199
+ # Optional, defaults to Rails log path
200
+ config.logstash.path = 'log/production.log'
145
201
  ```
146
202
 
147
203
  By default, every Rails log message will be written to logstash in `LogStash::Event` JSON format.
@@ -164,6 +220,25 @@ Verified to work with:
164
220
 
165
221
  Ruby 1.8.7 is not supported.
166
222
 
223
+
224
+ ## What type of logger should I use?
225
+
226
+ It depends on your specific needs, but most applications should use the default (UDP). Here are the advantages and
227
+ disadvantages of each type:
228
+
229
+ * UDP is faster than TCP because it's asynchronous (fire-and-forget). However, this means that log messages could get dropped.
230
+ This is okay for many applications.
231
+ * TCP verifies that every message has been received via two-way communication. It also supports SSL for secure transmission
232
+ of log messages over a network. This could slow your app down to a crawl if the TCP listener is under heavy load.
233
+ * A file is simple to use, but you will have to worry about log rotation and running out of disk space.
234
+ * Writing to a Unix socket is faster than writing to a TCP or UDP port, but only works locally.
235
+ * Writing to Redis is good for distributed setups that generate tons of logs. However, you will have another moving part and
236
+ have to worry about Redis running out of memory.
237
+ * Writing to stdout is only recommended for debugging purposes.
238
+
239
+ For a more detailed discussion of UDP vs TCP, I recommend reading this article:
240
+ [UDP vs. TCP](http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/)
241
+
167
242
  ## Breaking changes
168
243
 
169
244
  ### Version 0.5+
@@ -5,9 +5,13 @@ module LogStashLogger
5
5
  DEFAULT_TYPE = :udp
6
6
 
7
7
  autoload :Base, 'logstash-logger/device/base'
8
+ autoload :Connectable, 'logstash-logger/device/connectable'
8
9
  autoload :Socket, 'logstash-logger/device/socket'
9
10
  autoload :UDP, 'logstash-logger/device/udp'
10
11
  autoload :TCP, 'logstash-logger/device/tcp'
12
+ autoload :Unix, 'logstash-logger/device/unix'
13
+ autoload :Redis, 'logstash-logger/device/redis'
14
+ autoload :File, 'logstash-logger/device/file'
11
15
  autoload :Stdout, 'logstash-logger/device/stdout'
12
16
 
13
17
  def self.new(opts)
@@ -20,6 +24,9 @@ module LogStashLogger
20
24
  case type
21
25
  when :udp then UDP
22
26
  when :tcp then TCP
27
+ when :unix then Unix
28
+ when :file then File
29
+ when :redis then Redis
23
30
  when :stdout then Stdout
24
31
  else fail ArgumentError, 'Invalid type'
25
32
  end
@@ -2,8 +2,10 @@ module LogStashLogger
2
2
  module Device
3
3
  class Base
4
4
  attr_reader :io
5
+ attr_accessor :sync
5
6
 
6
7
  def initialize(opts={})
8
+ @sync = opts[:sync]
7
9
  end
8
10
 
9
11
  def to_io
@@ -0,0 +1,50 @@
1
+ module LogStashLogger
2
+ module Device
3
+ class Connectable < Base
4
+ def write(message)
5
+ with_connection do
6
+ super
7
+ end
8
+ end
9
+
10
+ def flush
11
+ return unless connected?
12
+ with_connection do
13
+ super
14
+ end
15
+ end
16
+
17
+ def to_io
18
+ with_connection do
19
+ @io
20
+ end
21
+ end
22
+
23
+ def connected?
24
+ !!@io
25
+ end
26
+
27
+ protected
28
+
29
+ # Implemented by subclasses
30
+ def connect
31
+ fail NotImplementedError
32
+ end
33
+
34
+ def reconnect
35
+ @io = nil
36
+ connect
37
+ end
38
+
39
+ # Ensure the block is executed with a valid connection
40
+ def with_connection(&block)
41
+ connect unless @io
42
+ yield
43
+ rescue => e
44
+ warn "#{self.class} - #{e.class} - #{e.message}"
45
+ close
46
+ @io = nil
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,23 @@
1
+ require 'fileutils'
2
+
3
+ module LogStashLogger
4
+ module Device
5
+ class File < Base
6
+ def initialize(opts)
7
+ super
8
+ @path = opts[:path] || fail(ArgumentError, "Path is required")
9
+ open
10
+ end
11
+
12
+ def open
13
+ unless ::File.exist? ::File.dirname @path
14
+ ::FileUtils.mkdir_p ::File.dirname @path
15
+ end
16
+
17
+ @io = ::File.open @path, ::File::WRONLY | ::File::APPEND | ::File::CREAT
18
+ @io.binmode
19
+ @io.sync = self.sync
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,70 @@
1
+ require 'redis'
2
+ require 'stud/buffer'
3
+
4
+ module LogStashLogger
5
+ module Device
6
+ class Redis < Connectable
7
+ include Stud::Buffer
8
+
9
+ DEFAULT_LIST = 'logstash'
10
+
11
+ attr_accessor :list
12
+
13
+ def initialize(opts)
14
+ super
15
+ @list = opts.delete(:list) || DEFAULT_LIST
16
+ @redis_options = opts
17
+
18
+ @batch_events = opts.fetch(:batch_events, 50)
19
+ @batch_timeout = opts.fetch(:batch_timeout, 5)
20
+
21
+ buffer_initialize max_items: @batch_events, max_interval: @batch_timeout
22
+ end
23
+
24
+ def connect
25
+ @io = ::Redis.new(@redis_options)
26
+ end
27
+
28
+ def reconnect
29
+ @io.client.reconnect
30
+ end
31
+
32
+ def with_connection
33
+ connect unless @io
34
+ yield
35
+ rescue ::Redis::InheritedError
36
+ reconnect
37
+ retry
38
+ rescue => e
39
+ warn "#{self.class} - #{e.class} - #{e.message}"
40
+ @io = nil
41
+ end
42
+
43
+ def write(message)
44
+ buffer_receive message, @list
45
+ buffer_flush(force: true) if @sync
46
+ end
47
+
48
+ def close
49
+ buffer_flush(final: true)
50
+ @io && @io.quit
51
+ rescue => e
52
+ warn "#{self.class} - #{e.class} - #{e.message}"
53
+ ensure
54
+ @io = nil
55
+ end
56
+
57
+ def flush(*args)
58
+ if args.empty?
59
+ buffer_flush
60
+ else
61
+ messages, list = *args
62
+ with_connection do
63
+ @io.rpush(list, messages)
64
+ end
65
+ end
66
+ end
67
+
68
+ end
69
+ end
70
+ end
@@ -2,55 +2,16 @@ require 'socket'
2
2
 
3
3
  module LogStashLogger
4
4
  module Device
5
- class Socket < Base
5
+ class Socket < Connectable
6
6
  DEFAULT_HOST = '0.0.0.0'
7
7
 
8
8
  attr_reader :host, :port
9
9
 
10
10
  def initialize(opts)
11
+ super
11
12
  @port = opts[:port] || fail(ArgumentError, "Port is required")
12
13
  @host = opts[:host] || DEFAULT_HOST
13
14
  end
14
-
15
- def write(message)
16
- with_connection do
17
- super
18
- end
19
- end
20
-
21
- def flush
22
- return unless connected?
23
- with_connection do
24
- super
25
- end
26
- end
27
-
28
- def to_io
29
- with_connection do
30
- @io
31
- end
32
- end
33
-
34
- def connected?
35
- !!@io
36
- end
37
-
38
- protected
39
-
40
- # Implemented by TCP and UDP devices
41
- def connect
42
- fail NotImplementedError
43
- end
44
-
45
- # Ensure the block is executed with a valid connection
46
- def with_connection(&block)
47
- connect unless @io
48
- yield
49
- rescue => e
50
- warn "#{self.class} - #{e.class} - #{e.message}"
51
- close
52
- @io = nil
53
- end
54
15
  end
55
16
  end
56
17
  end
@@ -2,7 +2,9 @@ module LogStashLogger
2
2
  module Device
3
3
  class Stdout < Base
4
4
  def initialize(opts={})
5
+ super
5
6
  @io = $stdout
7
+ @io.sync = sync unless sync.nil?
6
8
  end
7
9
 
8
10
  def close
@@ -29,7 +29,9 @@ module LogStashLogger
29
29
  end
30
30
 
31
31
  def non_ssl_connect
32
- @io = TCPSocket.new(@host, @port)
32
+ @io = TCPSocket.new(@host, @port).tap do |socket|
33
+ socket.sync = sync unless sync.nil?
34
+ end
33
35
  end
34
36
 
35
37
  def ssl_connect
@@ -4,6 +4,7 @@ module LogStashLogger
4
4
  def connect
5
5
  @io = UDPSocket.new.tap do |socket|
6
6
  socket.connect(@host, @port)
7
+ socket.sync = sync unless sync.nil?
7
8
  end
8
9
  end
9
10
  end
@@ -0,0 +1,18 @@
1
+ require 'socket'
2
+
3
+ module LogStashLogger
4
+ module Device
5
+ class Unix < Connectable
6
+ def initialize(opts={})
7
+ super
8
+ @path = opts[:path] || fail(ArgumentError, "Path is required")
9
+ end
10
+
11
+ def connect
12
+ @io = ::UNIXSocket.new(@path).tap do |socket|
13
+ socket.sync = sync unless sync.nil?
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -6,6 +6,14 @@ module LogStashLogger
6
6
 
7
7
  logger_options = app.config.logstash
8
8
 
9
+ if logger_options.type == :file
10
+ logger_options.path ||= app.config.paths["log"].first
11
+ end
12
+
13
+ if app.config.respond_to?(:autoflush_log)
14
+ logger_options.sync = app.config.autoflush_log
15
+ end
16
+
9
17
  logger = LogStashLogger.new(logger_options)
10
18
 
11
19
  logger.level = ::Logger.const_get(app.config.log_level.to_s.upcase)
@@ -1,3 +1,3 @@
1
1
  module LogStashLogger
2
- VERSION = "0.5.0"
2
+ VERSION = "0.6.0"
3
3
  end
@@ -19,8 +19,10 @@ Gem::Specification.new do |gem|
19
19
  gem.require_paths = ["lib"]
20
20
 
21
21
  gem.add_runtime_dependency 'logstash-event', '~> 1.2'
22
+ gem.add_runtime_dependency 'stud'
22
23
 
23
24
  gem.add_development_dependency 'rails'
25
+ gem.add_development_dependency 'redis'
24
26
  gem.add_development_dependency 'rspec', '>= 3'
25
27
  gem.add_development_dependency 'rake'
26
28
  gem.add_development_dependency 'pry'
@@ -0,0 +1,11 @@
1
+ input {
2
+ file {
3
+ path => "/usr/local/var/logstash.log"
4
+ format => json
5
+ }
6
+ }
7
+ output {
8
+ stdout {
9
+ codec => json_lines
10
+ }
11
+ }
@@ -0,0 +1,12 @@
1
+ input {
2
+ redis {
3
+ data_type => "list"
4
+ codec => json_lines
5
+ key => "logstash"
6
+ }
7
+ }
8
+ output {
9
+ stdout {
10
+ codec => json_lines
11
+ }
12
+ }
@@ -0,0 +1,11 @@
1
+ input {
2
+ unix {
3
+ path => "/tmp/logstash"
4
+ codec => json_lines
5
+ }
6
+ }
7
+ output {
8
+ stdout {
9
+ codec => json_lines
10
+ }
11
+ }
@@ -0,0 +1,15 @@
1
+ require 'logstash-logger'
2
+
3
+ describe LogStashLogger::Device::File do
4
+ include_context 'device'
5
+
6
+ it "writes to a file" do
7
+ expect(file_device.to_io).to be_a ::File
8
+ end
9
+
10
+ context "when path is not specified" do
11
+ it "raises an exception" do
12
+ expect { described_class.new }.to raise_error
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,22 @@
1
+ require 'logstash-logger'
2
+ require 'redis'
3
+
4
+ describe LogStashLogger::Device::Redis do
5
+ include_context 'device'
6
+
7
+ let(:redis) { double("Redis") }
8
+
9
+ before(:each) do
10
+ allow(Redis).to receive(:new) { redis }
11
+ allow(redis).to receive(:connect)
12
+ end
13
+
14
+ it "writes to a Redis list" do
15
+ expect(redis).to receive(:rpush)
16
+ redis_device.write "foo"
17
+ end
18
+
19
+ it "defaults the Redis list to 'logstash'" do
20
+ expect(redis_device.list).to eq('logstash')
21
+ end
22
+ end
@@ -8,6 +8,8 @@ describe LogStashLogger::Device::TCP do
8
8
 
9
9
  before(:each) do
10
10
  allow(TCPSocket).to receive(:new) { tcp_socket }
11
+ allow(tcp_socket).to receive(:sync=)
12
+
11
13
  allow(OpenSSL::SSL::SSLSocket).to receive(:new) { ssl_socket }
12
14
  allow(ssl_socket).to receive(:connect)
13
15
  end
@@ -0,0 +1,22 @@
1
+ require 'logstash-logger'
2
+
3
+ describe LogStashLogger::Device::Unix do
4
+ include_context 'device'
5
+
6
+ let(:unix_socket) { double("UNIXSocket") }
7
+
8
+ before(:each) do
9
+ allow(::UNIXSocket).to receive(:new) { unix_socket }
10
+ end
11
+
12
+ it "writes to a local unix socket" do
13
+ expect(unix_socket).to receive(:write)
14
+ unix_device.write('foo')
15
+ end
16
+
17
+ context "when path is not specified" do
18
+ it "raises an exception" do
19
+ expect { described_class.new }.to raise_error
20
+ end
21
+ end
22
+ end
@@ -38,4 +38,10 @@ RSpec.shared_context 'device' do
38
38
  let(:udp_device) { LogStashLogger::Device.new(type: :udp, port: port) }
39
39
  let(:tcp_device) { LogStashLogger::Device.new(type: :tcp, port: port) }
40
40
  let(:ssl_tcp_device) { LogStashLogger::Device.new(type: :tcp, port: port, ssl_enable: true) }
41
+ let(:unix_device) { LogStashLogger::Device.new(type: :unix, path: '/tmp/logstash') }
42
+
43
+ let(:file) { Tempfile.new('test') }
44
+ let(:file_device) { LogStashLogger::Device.new(type: :file, path: file.path)}
45
+
46
+ let(:redis_device) { LogStashLogger::Device.new(type: :redis, sync: true) }
41
47
  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.5.0
4
+ version: 0.6.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: 2014-06-12 00:00:00.000000000 Z
11
+ date: 2014-06-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash-event
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: stud
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rails
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,20 @@ dependencies:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: redis
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: rspec
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -130,10 +158,14 @@ files:
130
158
  - lib/logstash-logger.rb
131
159
  - lib/logstash-logger/device.rb
132
160
  - lib/logstash-logger/device/base.rb
161
+ - lib/logstash-logger/device/connectable.rb
162
+ - lib/logstash-logger/device/file.rb
163
+ - lib/logstash-logger/device/redis.rb
133
164
  - lib/logstash-logger/device/socket.rb
134
165
  - lib/logstash-logger/device/stdout.rb
135
166
  - lib/logstash-logger/device/tcp.rb
136
167
  - lib/logstash-logger/device/udp.rb
168
+ - lib/logstash-logger/device/unix.rb
137
169
  - lib/logstash-logger/formatter.rb
138
170
  - lib/logstash-logger/logger.rb
139
171
  - lib/logstash-logger/railtie.rb
@@ -142,13 +174,19 @@ files:
142
174
  - logstash-logger.gemspec
143
175
  - samples/example.crt
144
176
  - samples/example.key
177
+ - samples/file.conf
178
+ - samples/redis.conf
145
179
  - samples/ssl.conf
146
180
  - samples/tcp.conf
147
181
  - samples/udp.conf
182
+ - samples/unix.conf
183
+ - spec/device/file_spec.rb
184
+ - spec/device/redis_spec.rb
148
185
  - spec/device/socket_spec.rb
149
186
  - spec/device/stdout_spec.rb
150
187
  - spec/device/tcp_spec.rb
151
188
  - spec/device/udp_spec.rb
189
+ - spec/device/unix_spec.rb
152
190
  - spec/device_spec.rb
153
191
  - spec/logger_spec.rb
154
192
  - spec/rails_spec.rb
@@ -179,10 +217,13 @@ signing_key:
179
217
  specification_version: 4
180
218
  summary: LogStash Logger for ruby
181
219
  test_files:
220
+ - spec/device/file_spec.rb
221
+ - spec/device/redis_spec.rb
182
222
  - spec/device/socket_spec.rb
183
223
  - spec/device/stdout_spec.rb
184
224
  - spec/device/tcp_spec.rb
185
225
  - spec/device/udp_spec.rb
226
+ - spec/device/unix_spec.rb
186
227
  - spec/device_spec.rb
187
228
  - spec/logger_spec.rb
188
229
  - spec/rails_spec.rb