fluentd 0.12.0.pre.1 → 0.12.0.pre.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of fluentd might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.travis.yml +1 -0
- data/ChangeLog +21 -0
- data/README.md +10 -2
- data/Rakefile +4 -13
- data/example/v1_literal_example.conf +36 -0
- data/fluentd.gemspec +4 -1
- data/lib/fluent/buffer.rb +73 -46
- data/lib/fluent/command/fluentd.rb +7 -2
- data/lib/fluent/config/basic_parser.rb +5 -0
- data/lib/fluent/config/element.rb +2 -5
- data/lib/fluent/config/literal_parser.rb +26 -7
- data/lib/fluent/config/section.rb +2 -0
- data/lib/fluent/config/v1_parser.rb +9 -2
- data/lib/fluent/formatter.rb +2 -1
- data/lib/fluent/mixin.rb +22 -7
- data/lib/fluent/output.rb +17 -8
- data/lib/fluent/parser.rb +14 -3
- data/lib/fluent/plugin/buf_file.rb +30 -15
- data/lib/fluent/plugin/filter_grep.rb +69 -0
- data/lib/fluent/plugin/filter_record_transformer.rb +183 -0
- data/lib/fluent/plugin/in_exec.rb +6 -0
- data/lib/fluent/plugin/in_forward.rb +34 -4
- data/lib/fluent/plugin/in_http.rb +1 -1
- data/lib/fluent/plugin/out_exec.rb +1 -1
- data/lib/fluent/plugin/out_exec_filter.rb +8 -1
- data/lib/fluent/plugin/out_forward.rb +82 -4
- data/lib/fluent/supervisor.rb +1 -1
- data/lib/fluent/timezone.rb +131 -0
- data/lib/fluent/version.rb +1 -1
- data/test/config/assertions.rb +42 -0
- data/test/config/test_config_parser.rb +385 -0
- data/test/config/test_configurable.rb +530 -0
- data/test/config/test_configure_proxy.rb +99 -0
- data/test/config/test_dsl.rb +237 -0
- data/test/config/test_literal_parser.rb +293 -0
- data/test/config/test_section.rb +112 -0
- data/test/config/test_system_config.rb +49 -0
- data/test/helper.rb +25 -0
- data/test/plugin/test_buf_file.rb +604 -0
- data/test/plugin/test_buf_memory.rb +204 -0
- data/test/plugin/test_filter_grep.rb +124 -0
- data/test/plugin/test_filter_record_transformer.rb +251 -0
- data/test/plugin/test_in_exec.rb +1 -0
- data/test/plugin/test_in_forward.rb +205 -2
- data/test/plugin/test_in_gc_stat.rb +1 -0
- data/test/plugin/test_in_http.rb +58 -2
- data/test/plugin/test_in_object_space.rb +1 -0
- data/test/plugin/test_in_status.rb +1 -0
- data/test/plugin/test_in_stream.rb +1 -1
- data/test/plugin/test_in_syslog.rb +1 -1
- data/test/plugin/test_in_tail.rb +1 -0
- data/test/plugin/test_in_tcp.rb +1 -1
- data/test/plugin/test_in_udp.rb +1 -1
- data/test/plugin/test_out_copy.rb +1 -0
- data/test/plugin/test_out_exec.rb +1 -0
- data/test/plugin/test_out_exec_filter.rb +1 -0
- data/test/plugin/test_out_file.rb +36 -0
- data/test/plugin/test_out_forward.rb +279 -8
- data/test/plugin/test_out_roundrobin.rb +1 -0
- data/test/plugin/test_out_stdout.rb +1 -0
- data/test/plugin/test_out_stream.rb +1 -1
- data/test/test_buffer.rb +530 -0
- data/test/test_config.rb +1 -1
- data/test/test_configdsl.rb +1 -1
- data/test/test_formatter.rb +223 -0
- data/test/test_match.rb +1 -2
- data/test/test_mixin.rb +74 -2
- data/test/test_parser.rb +7 -1
- metadata +88 -35
- data/lib/fluent/plugin/buf_zfile.rb +0 -75
- data/spec/config/config_parser_spec.rb +0 -314
- data/spec/config/configurable_spec.rb +0 -524
- data/spec/config/configure_proxy_spec.rb +0 -96
- data/spec/config/dsl_spec.rb +0 -239
- data/spec/config/helper.rb +0 -49
- data/spec/config/literal_parser_spec.rb +0 -222
- data/spec/config/section_spec.rb +0 -97
- data/spec/config/system_config_spec.rb +0 -49
- data/spec/spec_helper.rb +0 -60
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5728345e3e45be5f8327ea9cfe0268b958c78d92
|
4
|
+
data.tar.gz: 453abbcdf2c21a2ff97fb6da4b9e4468c0519de1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c2878ba5c1d0d45e12d75eea0ed5700ec513b2dde96ecbf8efce4d6e2a0d81eeb9b4a20b7d43b3a053c9c84c24caf3a794fdc1af750b37d7d8e4e3feaf4bdcd
|
7
|
+
data.tar.gz: 68f2edd339b18575244d1643df2144f71b4dc2d48dac9355071fbc4a0ceb141bddcdee67189d84d1bf451b8445b83fe50bc545ecc6c866593012702c57b1bb24
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/ChangeLog
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
Release 0.10.55 - 2014/10/16
|
2
|
+
|
3
|
+
* config: Change v1's non-quoted string literal behaviour to v0's behaviour
|
4
|
+
https://github.com/fluent/fluentd/pull/436
|
5
|
+
* config: Relax '@' handling in the plugin configuration for backward compatibility
|
6
|
+
https://github.com/fluent/fluentd/pull/455
|
7
|
+
* config: Add --use-v0-config for keeping old configuration
|
8
|
+
https://github.com/fluent/fluentd/pull/434
|
9
|
+
* config: Add single quoted literal in v1 configuration
|
10
|
+
https://github.com/fluent/fluentd/pull/437
|
11
|
+
* config: Improve error message of Array / Hash parse error
|
12
|
+
https://github.com/fluent/fluentd/pull/457
|
13
|
+
* input: Reduce shutdown time in some network related plugins when use Cool.io 1.2
|
14
|
+
https://github.com/fluent/fluentd/pull/440
|
15
|
+
* parser: Use ParserError instead of general exception classes
|
16
|
+
https://github.com/fluent/fluentd/pull/453
|
17
|
+
* Remove unused zfile buffer plugin
|
18
|
+
https://github.com/fluent/fluentd/pull/445
|
19
|
+
|
20
|
+
Release 0.10.54 - skipped
|
21
|
+
|
1
22
|
Release 0.10.53 - 2014/08/21
|
2
23
|
|
3
24
|
* in_tail: Fix forget to detach Closer timer object
|
data/README.md
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
Fluentd: Open-Source
|
1
|
+
Fluentd: Open-Source Log Collector
|
2
2
|
===================================
|
3
3
|
|
4
4
|
[<img src="https://travis-ci.org/fluent/fluentd.svg" />](https://travis-ci.org/fluent/fluentd) [![Code Climate](https://codeclimate.com/github/fluent/fluentd/badges/gpa.svg)](https://codeclimate.com/github/fluent/fluentd)
|
5
5
|
|
6
|
-
|
7
6
|
[Fluentd](http://fluentd.org/) collects events from various data sources and writes them to files, RDBMS, NoSQL, IaaS, SaaS, Hadoop and so on. Fluentd helps you unify your logging infrastructure (Learn more about the [Unified Logging Layer](http://www.fluentd.org/blog/unified-logging-layer)).
|
8
7
|
|
9
8
|
<p align="center">
|
@@ -12,6 +11,13 @@ Fluentd: Open-Source Data Collector
|
|
12
11
|
|
13
12
|
An event consists of *tag*, *time* and *record*. Tag is a string separated with '.' (e.g. myapp.access). It is used to categorize events. Time is a UNIX time recorded at occurrence of an event. Record is a JSON object.
|
14
13
|
|
14
|
+
## Example Use Cases
|
15
|
+
|
16
|
+
Use Case | Description | Diagram
|
17
|
+
-------- | ------------|:---------:
|
18
|
+
Centralizing Apache/Nginx Server Logs | Fluentd can be used to tail access/error logs and transport them reliably to remote systems. | <img src="https://www.fluentd.org/assets/img/recipes/elasticsearch-s3-fluentd.png" height="150"/>
|
19
|
+
Syslog Alerting | Fluentd can "grep" for events and send out alerts. | <img src="https://www.fluentd.org/images/syslog-fluentd-alert.png" height="100"/>
|
20
|
+
Mobile/Web Application Logging | Fluentd can function as middleware to enable asynchronous, scalable logging for user action events. | <img src="https://www.fluentd.org/assets/img/datasources/asynchronous_logging.png" height="150"/>
|
15
21
|
|
16
22
|
## Quick Start
|
17
23
|
|
@@ -24,6 +30,8 @@ An event consists of *tag*, *time* and *record*. Tag is a string separated with
|
|
24
30
|
|
25
31
|
[Fluentd UI](https://github.com/fluent/fluentd-ui) is a graphical user interface to start/stop/configure Fluentd.
|
26
32
|
|
33
|
+
<p align="center"><img width="500" src="http://www.fluentd.org/images/blog/fluentd-ui.gif"/></p>
|
34
|
+
|
27
35
|
## More Information
|
28
36
|
|
29
37
|
- Website: http://fluentd.org/
|
data/Rakefile
CHANGED
@@ -4,10 +4,8 @@ require "bundler/gem_tasks"
|
|
4
4
|
require 'fileutils'
|
5
5
|
require 'rake/testtask'
|
6
6
|
require 'rake/clean'
|
7
|
-
require 'rspec/core'
|
8
|
-
require 'rspec/core/rake_task'
|
9
7
|
|
10
|
-
task :test => [:base_test
|
8
|
+
task :test => [:base_test]
|
11
9
|
|
12
10
|
desc 'Run test_unit based test'
|
13
11
|
Rake::TestTask.new(:base_test) do |t|
|
@@ -15,7 +13,7 @@ Rake::TestTask.new(:base_test) do |t|
|
|
15
13
|
# $ bundle exec rake base_test TEST=test/test_specified_path.rb
|
16
14
|
# $ bundle exec rake base_test TEST=test/test_*.rb
|
17
15
|
t.libs << "test"
|
18
|
-
t.test_files =
|
16
|
+
t.test_files = Dir["test/**/test_*.rb"].sort
|
19
17
|
t.verbose = true
|
20
18
|
#t.warning = true
|
21
19
|
end
|
@@ -26,17 +24,10 @@ task :parallel_test do
|
|
26
24
|
FileUtils.rm_rf('./test/tmp')
|
27
25
|
end
|
28
26
|
|
29
|
-
desc 'Run
|
30
|
-
RSpec::Core::RakeTask.new(:spec) do |t|
|
31
|
-
t.rspec_opts = %w[-c -f progress -r ./spec/spec_helper.rb]
|
32
|
-
t.pattern = 'spec/**/*_spec.rb'
|
33
|
-
t.verbose = true
|
34
|
-
end
|
35
|
-
|
36
|
-
desc 'Run rspec with simplecov'
|
27
|
+
desc 'Run test with simplecov'
|
37
28
|
task :coverage do |t|
|
38
29
|
ENV['SIMPLE_COV'] = '1'
|
39
|
-
Rake::Task["
|
30
|
+
Rake::Task["test"].invoke
|
40
31
|
end
|
41
32
|
|
42
33
|
task :default => [:test, :build]
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<section1>
|
2
|
+
key1 'text' # text
|
3
|
+
key2 '\'' # ' (1 char)
|
4
|
+
key3 '\\' # \ (1 char)
|
5
|
+
key4 '\t' # \t (2 char)
|
6
|
+
key5 '\[' # \[ (2 char)
|
7
|
+
key6 '\\[' # \[ (2 char)
|
8
|
+
key7 '#t' # #t (2 char)
|
9
|
+
key8 '\#{test}' # \#{test} (8 char)
|
10
|
+
key9 '#{test}' # #{test} (7 char)
|
11
|
+
key10 '\[(?<time>[^\]]*)\] (?<message>.*)' # \[(?<time>[^\]]*\] (?<message>.*)
|
12
|
+
</section1>
|
13
|
+
<section2>
|
14
|
+
key1 "text" # text
|
15
|
+
key2 "\"" # " (1 char)
|
16
|
+
key3 "\\" # \ (1 char)
|
17
|
+
key4 "\t" # TAB (1 char)
|
18
|
+
key5 "\[" # [ (1 char)
|
19
|
+
key6 "\\[" # \[ (2 char)
|
20
|
+
key7 "#t" # #t (2 char)
|
21
|
+
key8 "\#{test}" # #{test} (7 char)
|
22
|
+
key9 "#{test}" # replaced by eval('test')
|
23
|
+
key10 "\\[(?<time>[^\\]]*)\\] (?<message>.*)" # \[(?<time>[^\]]*\] (?<message>.*)
|
24
|
+
</section2>
|
25
|
+
<section3>
|
26
|
+
key1 text # text
|
27
|
+
key2 \ # \ (1 char)
|
28
|
+
key3 \\ # \\ (2 char)
|
29
|
+
key4 \t # \t (2 char)
|
30
|
+
key5 \[ # \[ (2 char)
|
31
|
+
key6 \\[ # \\[ (3 char)
|
32
|
+
key7 #t # #t (2 char)
|
33
|
+
key8 \#{test} # \#{test} (8 char)
|
34
|
+
key9 #{test} # #{test} (7 char)
|
35
|
+
key10 \[(?<time>[^\]]*)\] (?<message>.*) # \[(?<time>[^\]]*\] (?<message>.*)
|
36
|
+
</section3>
|
data/fluentd.gemspec
CHANGED
@@ -24,12 +24,15 @@ Gem::Specification.new do |gem|
|
|
24
24
|
gem.add_runtime_dependency("cool.io", [">= 1.2.2", "< 2.0.0"])
|
25
25
|
gem.add_runtime_dependency("http_parser.rb", [">= 0.5.1", "< 0.7.0"])
|
26
26
|
gem.add_runtime_dependency("sigdump", ["~> 0.2.2"])
|
27
|
+
gem.add_runtime_dependency("tzinfo", [">= 1.0.0"])
|
28
|
+
gem.add_runtime_dependency("tzinfo-data", [">= 1.0.0"])
|
29
|
+
gem.add_runtime_dependency("string-scrub", [">= 0.0.3"])
|
27
30
|
|
28
31
|
gem.add_development_dependency("rake", [">= 0.9.2"])
|
29
32
|
gem.add_development_dependency("flexmock")
|
30
33
|
gem.add_development_dependency("parallel_tests", [">= 0.15.3"])
|
31
|
-
gem.add_development_dependency("rspec", ["~> 3.0.0"])
|
32
34
|
gem.add_development_dependency("simplecov", ["~> 0.6.4"])
|
33
35
|
gem.add_development_dependency("rr", [">= 1.0.0"])
|
34
36
|
gem.add_development_dependency("timecop", [">= 0.3.0"])
|
37
|
+
gem.add_development_dependency("test-unit", ["~> 3.0.2"])
|
35
38
|
end
|
data/lib/fluent/buffer.rb
CHANGED
@@ -44,20 +44,25 @@ module Fluent
|
|
44
44
|
def before_shutdown(out)
|
45
45
|
end
|
46
46
|
|
47
|
-
|
48
|
-
|
47
|
+
def emit(key, data, chain)
|
48
|
+
raise NotImplementedError, "Implement this method in child class"
|
49
|
+
end
|
49
50
|
|
50
|
-
|
51
|
-
|
51
|
+
def keys
|
52
|
+
raise NotImplementedError, "Implement this method in child class"
|
53
|
+
end
|
52
54
|
|
53
|
-
|
54
|
-
|
55
|
+
def push(key)
|
56
|
+
raise NotImplementedError, "Implement this method in child class"
|
57
|
+
end
|
55
58
|
|
56
|
-
|
57
|
-
|
59
|
+
def pop(out)
|
60
|
+
raise NotImplementedError, "Implement this method in child class"
|
61
|
+
end
|
58
62
|
|
59
|
-
|
60
|
-
|
63
|
+
def clear!
|
64
|
+
raise NotImplementedError, "Implement this method in child class"
|
65
|
+
end
|
61
66
|
end
|
62
67
|
|
63
68
|
|
@@ -71,27 +76,33 @@ module Fluent
|
|
71
76
|
|
72
77
|
attr_reader :key
|
73
78
|
|
74
|
-
|
75
|
-
|
79
|
+
def <<(data)
|
80
|
+
raise NotImplementedError, "Implement this method in child class"
|
81
|
+
end
|
76
82
|
|
77
|
-
|
78
|
-
|
83
|
+
def size
|
84
|
+
raise NotImplementedError, "Implement this method in child class"
|
85
|
+
end
|
79
86
|
|
80
87
|
def empty?
|
81
88
|
size == 0
|
82
89
|
end
|
83
90
|
|
84
|
-
|
85
|
-
|
91
|
+
def close
|
92
|
+
raise NotImplementedError, "Implement this method in child class"
|
93
|
+
end
|
86
94
|
|
87
|
-
|
88
|
-
|
95
|
+
def purge
|
96
|
+
raise NotImplementedError, "Implement this method in child class"
|
97
|
+
end
|
89
98
|
|
90
|
-
|
91
|
-
|
99
|
+
def read
|
100
|
+
raise NotImplementedError, "Implement this method in child class"
|
101
|
+
end
|
92
102
|
|
93
|
-
|
94
|
-
|
103
|
+
def open
|
104
|
+
raise NotImplementedError, "Implement this method in child class"
|
105
|
+
end
|
95
106
|
|
96
107
|
def write_to(io)
|
97
108
|
open {|i|
|
@@ -116,6 +127,8 @@ module Fluent
|
|
116
127
|
|
117
128
|
def initialize
|
118
129
|
super
|
130
|
+
@map = nil # chunks to store data
|
131
|
+
@queue = nil # chunks to be flushed
|
119
132
|
@parallel_pop = true
|
120
133
|
end
|
121
134
|
|
@@ -164,18 +177,14 @@ module Fluent
|
|
164
177
|
key = key.to_s
|
165
178
|
|
166
179
|
synchronize do
|
167
|
-
|
180
|
+
# chunk unique id is generated in #new_chunk
|
181
|
+
chunk = (@map[key] ||= new_chunk(key))
|
168
182
|
|
169
|
-
if storable?(
|
183
|
+
if storable?(chunk, data)
|
170
184
|
chain.next
|
171
|
-
|
185
|
+
chunk << data
|
172
186
|
return false
|
173
187
|
|
174
|
-
## FIXME
|
175
|
-
#elsif data.bytesize > @buffer_chunk_limit
|
176
|
-
# # TODO
|
177
|
-
# raise BufferChunkLimitError, "received data too large"
|
178
|
-
|
179
188
|
elsif @queue.size >= @buffer_queue_limit
|
180
189
|
raise BufferQueueLimitError, "queue size exceeds limit"
|
181
190
|
end
|
@@ -185,9 +194,12 @@ module Fluent
|
|
185
194
|
$log.warn "This may occur problems in the output plugins ``at this server.``"
|
186
195
|
$log.warn "To avoid problems, set a smaller number to the buffer_chunk_limit"
|
187
196
|
$log.warn "in the forward output ``at the log forwarding server.``"
|
197
|
+
### TODO
|
198
|
+
# raise BufferChunkLimitError, "received data too large"
|
188
199
|
end
|
189
200
|
|
190
|
-
|
201
|
+
# chunk unique id is generated in #new_chunk
|
202
|
+
nc = new_chunk(key)
|
191
203
|
ok = false
|
192
204
|
|
193
205
|
begin
|
@@ -196,13 +208,17 @@ module Fluent
|
|
196
208
|
|
197
209
|
flush_trigger = false
|
198
210
|
@queue.synchronize {
|
199
|
-
enqueue(
|
211
|
+
enqueue(chunk) # this is buffer enqueue *hook*
|
200
212
|
flush_trigger = @queue.empty?
|
201
|
-
@queue <<
|
213
|
+
@queue << chunk # actual enqueue
|
202
214
|
@map[key] = nc
|
203
215
|
}
|
204
216
|
|
205
217
|
ok = true
|
218
|
+
# false: queue have 1 or more chunks before this emit
|
219
|
+
# so this enqueue is not a trigger to flush
|
220
|
+
# true: queue have no chunks before this emit
|
221
|
+
# so this enqueue is a trigger to flush this buffer ASAP
|
206
222
|
return flush_trigger
|
207
223
|
ensure
|
208
224
|
nc.purge unless ok
|
@@ -230,25 +246,31 @@ module Fluent
|
|
230
246
|
total
|
231
247
|
end
|
232
248
|
|
233
|
-
|
234
|
-
|
249
|
+
def new_chunk(key)
|
250
|
+
raise NotImplementedError, "Implement this method in child class"
|
251
|
+
end
|
235
252
|
|
236
|
-
|
237
|
-
|
253
|
+
def resume
|
254
|
+
raise NotImplementedError, "Implement this method in child class"
|
255
|
+
end
|
238
256
|
|
239
|
-
#
|
240
|
-
#
|
257
|
+
# enqueueing is done by #push
|
258
|
+
# this method is actually 'enqueue_hook'
|
259
|
+
def enqueue(chunk)
|
260
|
+
raise NotImplementedError, "Implement this method in child class"
|
261
|
+
end
|
241
262
|
|
263
|
+
# get the chunk specified by key, and push it into queue
|
242
264
|
def push(key)
|
243
265
|
synchronize do
|
244
|
-
|
245
|
-
if !
|
266
|
+
chunk = @map[key]
|
267
|
+
if !chunk || chunk.empty?
|
246
268
|
return false
|
247
269
|
end
|
248
270
|
|
249
271
|
@queue.synchronize do
|
250
|
-
enqueue(
|
251
|
-
@queue <<
|
272
|
+
enqueue(chunk)
|
273
|
+
@queue << chunk
|
252
274
|
@map.delete(key)
|
253
275
|
end
|
254
276
|
|
@@ -256,6 +278,8 @@ module Fluent
|
|
256
278
|
end # synchronize
|
257
279
|
end
|
258
280
|
|
281
|
+
# shift a chunk from queue, write and purge it
|
282
|
+
# returns boolean to indicate whether this buffer have more chunk to be flushed or not
|
259
283
|
def pop(out)
|
260
284
|
chunk = nil
|
261
285
|
@queue.synchronize do
|
@@ -270,21 +294,24 @@ module Fluent
|
|
270
294
|
end
|
271
295
|
|
272
296
|
begin
|
297
|
+
# #push(key) does not push empty chunks into queue.
|
298
|
+
# so this check is nonsense...
|
273
299
|
if !chunk.empty?
|
274
300
|
write_chunk(chunk, out)
|
275
301
|
end
|
276
302
|
|
277
|
-
|
303
|
+
queue_empty = false
|
278
304
|
@queue.synchronize do
|
279
305
|
@queue.delete_if {|c|
|
280
306
|
c.object_id == chunk.object_id
|
281
307
|
}
|
282
|
-
|
308
|
+
queue_empty = @queue.empty?
|
283
309
|
end
|
284
310
|
|
285
311
|
chunk.purge
|
286
312
|
|
287
|
-
return
|
313
|
+
# return to be flushed once more immediately, or not
|
314
|
+
return !queue_empty
|
288
315
|
ensure
|
289
316
|
chunk.mon_exit
|
290
317
|
end
|
@@ -70,7 +70,8 @@ op.on('--emit-error-log-interval SECONDS', "suppress interval seconds of emit er
|
|
70
70
|
opts[:suppress_interval] = s.to_i
|
71
71
|
}
|
72
72
|
|
73
|
-
op.on('--suppress-repeated-stacktrace', "suppress repeated stacktrace", TrueClass) {|b|
|
73
|
+
op.on('--suppress-repeated-stacktrace [VALUE]', "suppress repeated stacktrace", TrueClass) {|b|
|
74
|
+
b = true if b.nil?
|
74
75
|
opts[:suppress_repeated_stacktrace] = b
|
75
76
|
}
|
76
77
|
|
@@ -78,10 +79,14 @@ op.on('--without-source', "invoke a fluentd without input plugins", TrueClass) {
|
|
78
79
|
opts[:without_source] = b
|
79
80
|
}
|
80
81
|
|
81
|
-
op.on('--use-v1-config', "Use v1 configuration format", TrueClass) {|b|
|
82
|
+
op.on('--use-v1-config', "Use v1 configuration format (default)", TrueClass) {|b|
|
82
83
|
opts[:use_v1_config] = b
|
83
84
|
}
|
84
85
|
|
86
|
+
op.on('--use-v0-config', "Use v0 configuration format", TrueClass) {|b|
|
87
|
+
opts[:use_v1_config] = !b
|
88
|
+
}
|
89
|
+
|
85
90
|
op.on('-v', '--verbose', "increase verbose level (-v: debug, -vv: trace)", TrueClass) {|b|
|
86
91
|
if b
|
87
92
|
opts[:log_level] = [opts[:log_level] - 1, Fluent::Log::LEVEL_TRACE].max
|
@@ -27,6 +27,7 @@ module Fluent
|
|
27
27
|
|
28
28
|
LINE_END = /(?:[ \t]*(?:\#.*)?(?:\z|[\r\n]))+/
|
29
29
|
SPACING = /(?:[ \t\r\n]|\z|\#.*?(?:\z|[\r\n]))+/
|
30
|
+
SPACING_WITHOUT_COMMENT = /(?:[ \t\r\n]|\z)+/
|
30
31
|
|
31
32
|
module ClassMethods
|
32
33
|
def symbol(string)
|
@@ -78,6 +79,10 @@ module Fluent
|
|
78
79
|
skip(SPACING)
|
79
80
|
end
|
80
81
|
|
82
|
+
def spacing_without_comment
|
83
|
+
skip(SPACING_WITHOUT_COMMENT)
|
84
|
+
end
|
85
|
+
|
81
86
|
def parse_error!(message)
|
82
87
|
raise ConfigParseError, "#{message} at #{error_sample}"
|
83
88
|
end
|