fluentd 0.12.40 → 0.14.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 +4 -4
- data/.github/ISSUE_TEMPLATE.md +6 -0
- data/.gitignore +2 -0
- data/.travis.yml +33 -21
- data/CONTRIBUTING.md +1 -0
- data/ChangeLog +810 -237
- data/README.md +0 -25
- data/Rakefile +2 -1
- data/Vagrantfile +17 -0
- data/appveyor.yml +35 -0
- data/example/filter_stdout.conf +5 -5
- data/example/in_forward.conf +2 -2
- data/example/in_http.conf +2 -2
- data/example/in_out_forward.conf +17 -0
- data/example/in_syslog.conf +2 -2
- data/example/in_tail.conf +2 -2
- data/example/in_tcp.conf +2 -2
- data/example/in_udp.conf +2 -2
- data/example/out_copy.conf +4 -4
- data/example/out_file.conf +2 -2
- data/example/out_forward.conf +2 -2
- data/example/out_forward_buf_file.conf +23 -0
- data/example/v0_12_filter.conf +8 -8
- data/fluent.conf +29 -0
- data/fluentd.gemspec +18 -11
- data/lib/fluent/agent.rb +60 -58
- data/lib/fluent/command/cat.rb +1 -1
- data/lib/fluent/command/debug.rb +7 -5
- data/lib/fluent/command/fluentd.rb +97 -2
- data/lib/fluent/compat/call_super_mixin.rb +67 -0
- data/lib/fluent/compat/filter.rb +50 -0
- data/lib/fluent/compat/formatter.rb +109 -0
- data/lib/fluent/compat/input.rb +50 -0
- data/lib/fluent/compat/output.rb +617 -0
- data/lib/fluent/compat/output_chain.rb +60 -0
- data/lib/fluent/compat/parser.rb +163 -0
- data/lib/fluent/compat/propagate_default.rb +62 -0
- data/lib/fluent/config.rb +23 -20
- data/lib/fluent/config/configure_proxy.rb +119 -70
- data/lib/fluent/config/dsl.rb +5 -18
- data/lib/fluent/config/element.rb +72 -8
- data/lib/fluent/config/error.rb +0 -3
- data/lib/fluent/config/literal_parser.rb +0 -2
- data/lib/fluent/config/parser.rb +4 -4
- data/lib/fluent/config/section.rb +39 -28
- data/lib/fluent/config/types.rb +2 -13
- data/lib/fluent/config/v1_parser.rb +1 -3
- data/lib/fluent/configurable.rb +48 -16
- data/lib/fluent/daemon.rb +15 -0
- data/lib/fluent/engine.rb +26 -52
- data/lib/fluent/env.rb +6 -4
- data/lib/fluent/event.rb +58 -11
- data/lib/fluent/event_router.rb +5 -5
- data/lib/fluent/filter.rb +2 -50
- data/lib/fluent/formatter.rb +4 -293
- data/lib/fluent/input.rb +2 -32
- data/lib/fluent/label.rb +2 -2
- data/lib/fluent/load.rb +3 -2
- data/lib/fluent/log.rb +107 -38
- data/lib/fluent/match.rb +0 -36
- data/lib/fluent/mixin.rb +117 -7
- data/lib/fluent/msgpack_factory.rb +62 -0
- data/lib/fluent/output.rb +7 -612
- data/lib/fluent/output_chain.rb +23 -0
- data/lib/fluent/parser.rb +4 -800
- data/lib/fluent/plugin.rb +100 -121
- data/lib/fluent/plugin/bare_output.rb +63 -0
- data/lib/fluent/plugin/base.rb +121 -0
- data/lib/fluent/plugin/buf_file.rb +101 -182
- data/lib/fluent/plugin/buf_memory.rb +9 -92
- data/lib/fluent/plugin/buffer.rb +473 -0
- data/lib/fluent/plugin/buffer/chunk.rb +135 -0
- data/lib/fluent/plugin/buffer/file_chunk.rb +339 -0
- data/lib/fluent/plugin/buffer/memory_chunk.rb +100 -0
- data/lib/fluent/plugin/exec_util.rb +80 -75
- data/lib/fluent/plugin/file_util.rb +33 -28
- data/lib/fluent/plugin/file_wrapper.rb +120 -0
- data/lib/fluent/plugin/filter.rb +51 -0
- data/lib/fluent/plugin/filter_grep.rb +13 -40
- data/lib/fluent/plugin/filter_record_transformer.rb +22 -18
- data/lib/fluent/plugin/formatter.rb +93 -0
- data/lib/fluent/plugin/formatter_csv.rb +48 -0
- data/lib/fluent/plugin/formatter_hash.rb +32 -0
- data/lib/fluent/plugin/formatter_json.rb +47 -0
- data/lib/fluent/plugin/formatter_ltsv.rb +42 -0
- data/lib/fluent/plugin/formatter_msgpack.rb +32 -0
- data/lib/fluent/plugin/formatter_out_file.rb +45 -0
- data/lib/fluent/plugin/formatter_single_value.rb +34 -0
- data/lib/fluent/plugin/formatter_stdout.rb +39 -0
- data/lib/fluent/plugin/in_debug_agent.rb +4 -0
- data/lib/fluent/plugin/in_dummy.rb +22 -18
- data/lib/fluent/plugin/in_exec.rb +18 -8
- data/lib/fluent/plugin/in_forward.rb +36 -79
- data/lib/fluent/plugin/in_gc_stat.rb +4 -0
- data/lib/fluent/plugin/in_http.rb +21 -18
- data/lib/fluent/plugin/in_monitor_agent.rb +15 -48
- data/lib/fluent/plugin/in_object_space.rb +6 -1
- data/lib/fluent/plugin/in_stream.rb +7 -3
- data/lib/fluent/plugin/in_syslog.rb +46 -95
- data/lib/fluent/plugin/in_tail.rb +51 -595
- data/lib/fluent/plugin/in_tcp.rb +8 -1
- data/lib/fluent/plugin/in_udp.rb +8 -14
- data/lib/fluent/plugin/input.rb +33 -0
- data/lib/fluent/plugin/multi_output.rb +95 -0
- data/lib/fluent/plugin/out_buffered_null.rb +59 -0
- data/lib/fluent/plugin/out_copy.rb +11 -7
- data/lib/fluent/plugin/out_exec.rb +15 -11
- data/lib/fluent/plugin/out_exec_filter.rb +18 -10
- data/lib/fluent/plugin/out_file.rb +34 -5
- data/lib/fluent/plugin/out_forward.rb +19 -9
- data/lib/fluent/plugin/out_null.rb +0 -14
- data/lib/fluent/plugin/out_roundrobin.rb +11 -7
- data/lib/fluent/plugin/out_stdout.rb +5 -7
- data/lib/fluent/plugin/out_stream.rb +3 -1
- data/lib/fluent/plugin/output.rb +979 -0
- data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
- data/lib/fluent/plugin/parser.rb +244 -0
- data/lib/fluent/plugin/parser_apache.rb +24 -0
- data/lib/fluent/plugin/parser_apache2.rb +84 -0
- data/lib/fluent/plugin/parser_apache_error.rb +21 -0
- data/lib/fluent/plugin/parser_csv.rb +31 -0
- data/lib/fluent/plugin/parser_json.rb +79 -0
- data/lib/fluent/plugin/parser_ltsv.rb +50 -0
- data/lib/fluent/plugin/parser_multiline.rb +102 -0
- data/lib/fluent/plugin/parser_nginx.rb +24 -0
- data/lib/fluent/plugin/parser_none.rb +36 -0
- data/lib/fluent/plugin/parser_syslog.rb +82 -0
- data/lib/fluent/plugin/parser_tsv.rb +37 -0
- data/lib/fluent/plugin/socket_util.rb +120 -114
- data/lib/fluent/plugin/storage.rb +84 -0
- data/lib/fluent/plugin/storage_local.rb +116 -0
- data/lib/fluent/plugin/string_util.rb +16 -13
- data/lib/fluent/plugin_helper.rb +39 -0
- data/lib/fluent/plugin_helper/child_process.rb +298 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +99 -0
- data/lib/fluent/plugin_helper/event_emitter.rb +80 -0
- data/lib/fluent/plugin_helper/event_loop.rb +118 -0
- data/lib/fluent/plugin_helper/retry_state.rb +177 -0
- data/lib/fluent/plugin_helper/storage.rb +308 -0
- data/lib/fluent/plugin_helper/thread.rb +147 -0
- data/lib/fluent/plugin_helper/timer.rb +85 -0
- data/lib/fluent/plugin_id.rb +63 -0
- data/lib/fluent/process.rb +21 -30
- data/lib/fluent/registry.rb +21 -9
- data/lib/fluent/root_agent.rb +115 -40
- data/lib/fluent/supervisor.rb +330 -320
- data/lib/fluent/system_config.rb +42 -18
- data/lib/fluent/test.rb +6 -1
- data/lib/fluent/test/base.rb +23 -3
- data/lib/fluent/test/driver/base.rb +247 -0
- data/lib/fluent/test/driver/event_feeder.rb +98 -0
- data/lib/fluent/test/driver/filter.rb +35 -0
- data/lib/fluent/test/driver/input.rb +31 -0
- data/lib/fluent/test/driver/output.rb +78 -0
- data/lib/fluent/test/driver/test_event_router.rb +45 -0
- data/lib/fluent/test/filter_test.rb +0 -1
- data/lib/fluent/test/formatter_test.rb +2 -1
- data/lib/fluent/test/input_test.rb +23 -17
- data/lib/fluent/test/output_test.rb +28 -39
- data/lib/fluent/test/parser_test.rb +1 -1
- data/lib/fluent/time.rb +104 -1
- data/lib/fluent/{status.rb → unique_id.rb} +15 -24
- data/lib/fluent/version.rb +1 -1
- data/lib/fluent/winsvc.rb +72 -0
- data/test/compat/test_calls_super.rb +164 -0
- data/test/config/test_config_parser.rb +83 -0
- data/test/config/test_configurable.rb +547 -274
- data/test/config/test_configure_proxy.rb +146 -29
- data/test/config/test_dsl.rb +3 -181
- data/test/config/test_element.rb +274 -0
- data/test/config/test_literal_parser.rb +1 -1
- data/test/config/test_section.rb +79 -7
- data/test/config/test_system_config.rb +21 -0
- data/test/config/test_types.rb +3 -26
- data/test/helper.rb +78 -8
- data/test/plugin/test_bare_output.rb +118 -0
- data/test/plugin/test_base.rb +75 -0
- data/test/plugin/test_buf_file.rb +420 -521
- data/test/plugin/test_buf_memory.rb +32 -194
- data/test/plugin/test_buffer.rb +981 -0
- data/test/plugin/test_buffer_chunk.rb +110 -0
- data/test/plugin/test_buffer_file_chunk.rb +770 -0
- data/test/plugin/test_buffer_memory_chunk.rb +265 -0
- data/test/plugin/test_filter.rb +255 -0
- data/test/plugin/test_filter_grep.rb +2 -73
- data/test/plugin/test_filter_record_transformer.rb +24 -68
- data/test/plugin/test_filter_stdout.rb +6 -6
- data/test/plugin/test_in_debug_agent.rb +2 -0
- data/test/plugin/test_in_dummy.rb +11 -17
- data/test/plugin/test_in_exec.rb +6 -25
- data/test/plugin/test_in_forward.rb +112 -151
- data/test/plugin/test_in_gc_stat.rb +2 -0
- data/test/plugin/test_in_http.rb +106 -157
- data/test/plugin/test_in_object_space.rb +21 -5
- data/test/plugin/test_in_stream.rb +14 -13
- data/test/plugin/test_in_syslog.rb +30 -275
- data/test/plugin/test_in_tail.rb +95 -234
- data/test/plugin/test_in_tcp.rb +14 -0
- data/test/plugin/test_in_udp.rb +21 -13
- data/test/plugin/test_input.rb +122 -0
- data/test/plugin/test_multi_output.rb +180 -0
- data/test/plugin/test_out_buffered_null.rb +79 -0
- data/test/plugin/test_out_copy.rb +15 -2
- data/test/plugin/test_out_exec.rb +75 -25
- data/test/plugin/test_out_exec_filter.rb +74 -8
- data/test/plugin/test_out_file.rb +61 -7
- data/test/plugin/test_out_forward.rb +92 -15
- data/test/plugin/test_out_roundrobin.rb +1 -0
- data/test/plugin/test_out_stdout.rb +22 -13
- data/test/plugin/test_out_stream.rb +18 -0
- data/test/plugin/test_output.rb +515 -0
- data/test/plugin/test_output_as_buffered.rb +1540 -0
- data/test/plugin/test_output_as_buffered_overflow.rb +247 -0
- data/test/plugin/test_output_as_buffered_retries.rb +808 -0
- data/test/plugin/test_output_as_buffered_secondary.rb +776 -0
- data/test/plugin/test_output_as_standard.rb +362 -0
- data/test/plugin/test_owned_by.rb +35 -0
- data/test/plugin/test_storage.rb +167 -0
- data/test/plugin/test_storage_local.rb +8 -0
- data/test/plugin_helper/test_child_process.rb +599 -0
- data/test/plugin_helper/test_compat_parameters.rb +175 -0
- data/test/plugin_helper/test_event_emitter.rb +51 -0
- data/test/plugin_helper/test_event_loop.rb +52 -0
- data/test/plugin_helper/test_retry_state.rb +399 -0
- data/test/plugin_helper/test_storage.rb +411 -0
- data/test/plugin_helper/test_thread.rb +164 -0
- data/test/plugin_helper/test_timer.rb +100 -0
- data/test/scripts/exec_script.rb +0 -6
- data/test/scripts/fluent/plugin/out_test.rb +3 -0
- data/test/test_config.rb +13 -4
- data/test/test_event.rb +24 -13
- data/test/test_event_router.rb +8 -7
- data/test/test_event_time.rb +187 -0
- data/test/test_formatter.rb +13 -51
- data/test/test_input.rb +1 -1
- data/test/test_log.rb +239 -16
- data/test/test_mixin.rb +1 -1
- data/test/test_output.rb +53 -66
- data/test/test_parser.rb +105 -323
- data/test/test_plugin_helper.rb +81 -0
- data/test/test_root_agent.rb +4 -52
- data/test/test_supervisor.rb +272 -0
- data/test/test_unique_id.rb +47 -0
- metadata +180 -54
- data/lib/fluent/buffer.rb +0 -365
- data/lib/fluent/plugin/filter_parser.rb +0 -107
- data/lib/fluent/plugin/in_status.rb +0 -76
- data/lib/fluent/test/helpers.rb +0 -86
- data/test/plugin/data/log/foo/bar2 +0 -0
- data/test/plugin/test_filter_parser.rb +0 -744
- data/test/plugin/test_in_status.rb +0 -38
- data/test/test_buffer.rb +0 -624
data/test/test_formatter.rb
CHANGED
|
@@ -29,10 +29,6 @@ module FormatterTest
|
|
|
29
29
|
{'message' => 'awesome'}
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
def symbolic_record
|
|
33
|
-
{:message => :awesome}
|
|
34
|
-
end
|
|
35
|
-
|
|
36
32
|
def with_timezone(tz)
|
|
37
33
|
oldtz, ENV['TZ'] = ENV['TZ'], tz
|
|
38
34
|
yield
|
|
@@ -56,7 +52,7 @@ module FormatterTest
|
|
|
56
52
|
include FormatterTest
|
|
57
53
|
|
|
58
54
|
def create_driver(conf={})
|
|
59
|
-
|
|
55
|
+
Fluent::Test::FormatterTestDriver.new(Formatter).configure(conf)
|
|
60
56
|
end
|
|
61
57
|
|
|
62
58
|
def test_call
|
|
@@ -142,22 +138,6 @@ module FormatterTest
|
|
|
142
138
|
assert_equal("#{Yajl.dump(record)}\n", formatted)
|
|
143
139
|
end
|
|
144
140
|
|
|
145
|
-
data('oj' => 'oj', 'yajl' => 'yajl')
|
|
146
|
-
def test_format_without_nl(data)
|
|
147
|
-
@formatter.configure('json_parser' => data, 'add_newline' => false)
|
|
148
|
-
formatted = @formatter.format(tag, @time, record)
|
|
149
|
-
|
|
150
|
-
assert_equal(Yajl.dump(record), formatted)
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
data('oj' => 'oj', 'yajl' => 'yajl')
|
|
154
|
-
def test_format_with_symbolic_record(data)
|
|
155
|
-
@formatter.configure('json_parser' => data)
|
|
156
|
-
formatted = @formatter.format(tag, @time, symbolic_record)
|
|
157
|
-
|
|
158
|
-
assert_equal("#{JSON.generate(record)}\n", formatted)
|
|
159
|
-
end
|
|
160
|
-
|
|
161
141
|
data('oj' => 'oj', 'yajl' => 'yajl')
|
|
162
142
|
def test_format_with_include_tag(data)
|
|
163
143
|
@formatter.configure('include_tag_key' => 'true', 'tag_key' => 'foo', 'json_parser' => data)
|
|
@@ -260,13 +240,6 @@ module FormatterTest
|
|
|
260
240
|
assert_equal("message:awesome\n", formatted)
|
|
261
241
|
end
|
|
262
242
|
|
|
263
|
-
def test_format_without_nl
|
|
264
|
-
@formatter.configure('add_newline' => false)
|
|
265
|
-
formatted = @formatter.format(tag, @time, record)
|
|
266
|
-
|
|
267
|
-
assert_equal("message:awesome", formatted)
|
|
268
|
-
end
|
|
269
|
-
|
|
270
243
|
def test_format_with_tag
|
|
271
244
|
@formatter.configure('include_tag_key' => 'true')
|
|
272
245
|
formatted = @formatter.format(tag, @time, record)
|
|
@@ -304,15 +277,7 @@ module FormatterTest
|
|
|
304
277
|
def test_config_params
|
|
305
278
|
assert_equal ',', @formatter.delimiter
|
|
306
279
|
assert_equal true, @formatter.force_quotes
|
|
307
|
-
|
|
308
|
-
end
|
|
309
|
-
|
|
310
|
-
data('empty array' => [],
|
|
311
|
-
'array including empty string' => ['', ''])
|
|
312
|
-
def test_empty_fields(param)
|
|
313
|
-
assert_raise ConfigError do
|
|
314
|
-
@formatter.configure('fields' => param)
|
|
315
|
-
end
|
|
280
|
+
assert_equal [], @formatter.fields
|
|
316
281
|
end
|
|
317
282
|
|
|
318
283
|
data(
|
|
@@ -321,7 +286,7 @@ module FormatterTest
|
|
|
321
286
|
'pipe' => ['|', '|'])
|
|
322
287
|
def test_config_params_with_customized_delimiters(data)
|
|
323
288
|
expected, target = data
|
|
324
|
-
@formatter.configure('
|
|
289
|
+
@formatter.configure('delimiter' => target)
|
|
325
290
|
assert_equal expected, @formatter.delimiter
|
|
326
291
|
end
|
|
327
292
|
|
|
@@ -334,15 +299,6 @@ module FormatterTest
|
|
|
334
299
|
assert_equal("\"awesome\",\"awesome2\"\n", formatted)
|
|
335
300
|
end
|
|
336
301
|
|
|
337
|
-
def test_format_without_nl
|
|
338
|
-
@formatter.configure('fields' => 'message,message2', 'add_newline' => false)
|
|
339
|
-
formatted = @formatter.format(tag, @time, {
|
|
340
|
-
'message' => 'awesome',
|
|
341
|
-
'message2' => 'awesome2'
|
|
342
|
-
})
|
|
343
|
-
assert_equal("\"awesome\",\"awesome2\"", formatted)
|
|
344
|
-
end
|
|
345
|
-
|
|
346
302
|
def test_format_with_tag
|
|
347
303
|
@formatter.configure(
|
|
348
304
|
'fields' => 'tag,message,message2',
|
|
@@ -434,13 +390,13 @@ module FormatterTest
|
|
|
434
390
|
end
|
|
435
391
|
|
|
436
392
|
def test_format
|
|
437
|
-
formatter =
|
|
393
|
+
formatter = Fluent::Plugin.new_formatter('single_value')
|
|
438
394
|
formatted = formatter.format('tag', Engine.now, {'message' => 'awesome'})
|
|
439
395
|
assert_equal("awesome\n", formatted)
|
|
440
396
|
end
|
|
441
397
|
|
|
442
398
|
def test_format_without_newline
|
|
443
|
-
formatter =
|
|
399
|
+
formatter = Fluent::Plugin.new_formatter('single_value')
|
|
444
400
|
formatter.configure('add_newline' => 'false')
|
|
445
401
|
formatted = formatter.format('tag', Engine.now, {'message' => 'awesome'})
|
|
446
402
|
assert_equal("awesome", formatted)
|
|
@@ -460,7 +416,7 @@ module FormatterTest
|
|
|
460
416
|
|
|
461
417
|
def test_unknown_format
|
|
462
418
|
assert_raise ConfigError do
|
|
463
|
-
|
|
419
|
+
Fluent::Plugin.new_formatter('unknown')
|
|
464
420
|
end
|
|
465
421
|
end
|
|
466
422
|
|
|
@@ -468,7 +424,7 @@ module FormatterTest
|
|
|
468
424
|
def test_find_formatter(data)
|
|
469
425
|
$LOAD_PATH.unshift(File.join(File.expand_path(File.dirname(__FILE__)), 'scripts'))
|
|
470
426
|
assert_nothing_raised ConfigError do
|
|
471
|
-
|
|
427
|
+
Fluent::Plugin.new_formatter(data)
|
|
472
428
|
end
|
|
473
429
|
$LOAD_PATH.shift
|
|
474
430
|
end
|
|
@@ -644,6 +600,12 @@ module FormatterTest
|
|
|
644
600
|
assert_equal("20140926 1400-1000", format(@fmt, true, "-10"))
|
|
645
601
|
end
|
|
646
602
|
end
|
|
603
|
+
|
|
604
|
+
def test_format_with_subsec
|
|
605
|
+
time = Fluent::EventTime.new(@time)
|
|
606
|
+
formatter = Fluent::TimeFormatter.new("%Y%m%d %H%M.%N", false, nil)
|
|
607
|
+
assert_equal("20140927 0000.000000000", formatter.format(time))
|
|
608
|
+
end
|
|
647
609
|
end
|
|
648
610
|
|
|
649
611
|
class TimeConfigTest < ::Test::Unit::TestCase
|
data/test/test_input.rb
CHANGED
|
@@ -17,7 +17,7 @@ class FluentInputTest < ::Test::Unit::TestCase
|
|
|
17
17
|
assert_equal Engine.root_agent.event_router, d.instance.router
|
|
18
18
|
|
|
19
19
|
d = nil
|
|
20
|
-
assert_nothing_raised {
|
|
20
|
+
assert_nothing_raised {
|
|
21
21
|
d = create_driver('@label @known')
|
|
22
22
|
}
|
|
23
23
|
expected = Engine.root_agent.find_label('@known').event_router
|
data/test/test_log.rb
CHANGED
|
@@ -11,6 +11,7 @@ class LogTest < Test::Unit::TestCase
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def teardown
|
|
14
|
+
@log_device.reset
|
|
14
15
|
Thread.current[:last_repeated_stacktrace] = nil
|
|
15
16
|
end
|
|
16
17
|
|
|
@@ -25,7 +26,43 @@ class LogTest < Test::Unit::TestCase
|
|
|
25
26
|
)
|
|
26
27
|
def test_output(data)
|
|
27
28
|
log_level, start = data
|
|
28
|
-
|
|
29
|
+
logdev = @log_device
|
|
30
|
+
logger = ServerEngine::DaemonLogger.new(logdev)
|
|
31
|
+
log = Fluent::Log.new(logger)
|
|
32
|
+
log.level = log_level
|
|
33
|
+
log.trace "trace log"
|
|
34
|
+
log.debug "debug log"
|
|
35
|
+
log.info "info log"
|
|
36
|
+
log.warn "warn log"
|
|
37
|
+
log.error "error log"
|
|
38
|
+
log.fatal "fatal log"
|
|
39
|
+
expected = [
|
|
40
|
+
"#{@timestamp_str} [trace]: trace log\n",
|
|
41
|
+
"#{@timestamp_str} [debug]: debug log\n",
|
|
42
|
+
"#{@timestamp_str} [info]: info log\n",
|
|
43
|
+
"#{@timestamp_str} [warn]: warn log\n",
|
|
44
|
+
"#{@timestamp_str} [error]: error log\n",
|
|
45
|
+
"#{@timestamp_str} [fatal]: fatal log\n"
|
|
46
|
+
][start..-1]
|
|
47
|
+
assert_equal(expected, log.out.logs)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
data(
|
|
51
|
+
trace: [ServerEngine::DaemonLogger::TRACE, 0],
|
|
52
|
+
debug: [ServerEngine::DaemonLogger::DEBUG, 1],
|
|
53
|
+
info: [ServerEngine::DaemonLogger::INFO, 2],
|
|
54
|
+
warn: [ServerEngine::DaemonLogger::WARN, 3],
|
|
55
|
+
error: [ServerEngine::DaemonLogger::ERROR, 4],
|
|
56
|
+
fatal: [ServerEngine::DaemonLogger::FATAL, 5],
|
|
57
|
+
)
|
|
58
|
+
def test_output_with_serverengine_loglevel(data)
|
|
59
|
+
log_level, start = data
|
|
60
|
+
|
|
61
|
+
dl_opts = {}
|
|
62
|
+
dl_opts[:log_level] = log_level
|
|
63
|
+
logdev = @log_device
|
|
64
|
+
logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
|
|
65
|
+
log = Fluent::Log.new(logger)
|
|
29
66
|
log.trace "trace log"
|
|
30
67
|
log.debug "debug log"
|
|
31
68
|
log.info "info log"
|
|
@@ -53,7 +90,44 @@ class LogTest < Test::Unit::TestCase
|
|
|
53
90
|
)
|
|
54
91
|
def test_output_with_block(data)
|
|
55
92
|
log_level, start = data
|
|
56
|
-
|
|
93
|
+
|
|
94
|
+
logdev = @log_device
|
|
95
|
+
logger = ServerEngine::DaemonLogger.new(logdev)
|
|
96
|
+
log = Fluent::Log.new(logger)
|
|
97
|
+
log.level = log_level
|
|
98
|
+
log.trace { "trace log" }
|
|
99
|
+
log.debug { "debug log" }
|
|
100
|
+
log.info { "info log" }
|
|
101
|
+
log.warn { "warn log" }
|
|
102
|
+
log.error { "error log" }
|
|
103
|
+
log.fatal { "fatal log" }
|
|
104
|
+
expected = [
|
|
105
|
+
"#{@timestamp_str} [trace]: trace log\n",
|
|
106
|
+
"#{@timestamp_str} [debug]: debug log\n",
|
|
107
|
+
"#{@timestamp_str} [info]: info log\n",
|
|
108
|
+
"#{@timestamp_str} [warn]: warn log\n",
|
|
109
|
+
"#{@timestamp_str} [error]: error log\n",
|
|
110
|
+
"#{@timestamp_str} [fatal]: fatal log\n"
|
|
111
|
+
][start..-1]
|
|
112
|
+
assert_equal(expected, log.out.logs)
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
data(
|
|
116
|
+
trace: [ServerEngine::DaemonLogger::TRACE, 0],
|
|
117
|
+
debug: [ServerEngine::DaemonLogger::DEBUG, 1],
|
|
118
|
+
info: [ServerEngine::DaemonLogger::INFO, 2],
|
|
119
|
+
warn: [ServerEngine::DaemonLogger::WARN, 3],
|
|
120
|
+
error: [ServerEngine::DaemonLogger::ERROR, 4],
|
|
121
|
+
fatal: [ServerEngine::DaemonLogger::FATAL, 5],
|
|
122
|
+
)
|
|
123
|
+
def test_output_with_block_with_serverengine_loglevel(data)
|
|
124
|
+
log_level, start = data
|
|
125
|
+
|
|
126
|
+
dl_opts = {}
|
|
127
|
+
dl_opts[:log_level] = log_level
|
|
128
|
+
logdev = @log_device
|
|
129
|
+
logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
|
|
130
|
+
log = Fluent::Log.new(logger)
|
|
57
131
|
log.trace { "trace log" }
|
|
58
132
|
log.debug { "debug log" }
|
|
59
133
|
log.info { "info log" }
|
|
@@ -81,7 +155,42 @@ class LogTest < Test::Unit::TestCase
|
|
|
81
155
|
)
|
|
82
156
|
def test_execute_block(data)
|
|
83
157
|
log_level, expected = data
|
|
84
|
-
|
|
158
|
+
logdev = @log_device
|
|
159
|
+
logger = ServerEngine::DaemonLogger.new(logdev)
|
|
160
|
+
log = Fluent::Log.new(logger)
|
|
161
|
+
log.level = log_level
|
|
162
|
+
block_called = {
|
|
163
|
+
trace: false,
|
|
164
|
+
debug: false,
|
|
165
|
+
info: false,
|
|
166
|
+
warn: false,
|
|
167
|
+
error: false,
|
|
168
|
+
fatal: false,
|
|
169
|
+
}
|
|
170
|
+
log.trace { block_called[:trace] = true }
|
|
171
|
+
log.debug { block_called[:debug] = true }
|
|
172
|
+
log.info { block_called[:info] = true }
|
|
173
|
+
log.warn { block_called[:warn] = true }
|
|
174
|
+
log.error { block_called[:error] = true }
|
|
175
|
+
log.fatal { block_called[:fatal] = true }
|
|
176
|
+
assert_equal(expected, block_called)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
data(
|
|
180
|
+
trace: [ServerEngine::DaemonLogger::TRACE, { trace: true, debug: true, info: true, warn: true, error: true, fatal: true }],
|
|
181
|
+
debug: [ServerEngine::DaemonLogger::DEBUG, { trace: false, debug: true, info: true, warn: true, error: true, fatal: true }],
|
|
182
|
+
info: [ServerEngine::DaemonLogger::INFO, { trace: false, debug: false, info: true, warn: true, error: true, fatal: true }],
|
|
183
|
+
warn: [ServerEngine::DaemonLogger::WARN, { trace: false, debug: false, info: false, warn: true, error: true, fatal: true }],
|
|
184
|
+
error: [ServerEngine::DaemonLogger::ERROR, { trace: false, debug: false, info: false, warn: false, error: true, fatal: true }],
|
|
185
|
+
fatal: [ServerEngine::DaemonLogger::FATAL, { trace: false, debug: false, info: false, warn: false, error: false, fatal: true }],
|
|
186
|
+
)
|
|
187
|
+
def test_execute_block_with_serverengine_loglevel(data)
|
|
188
|
+
log_level, expected = data
|
|
189
|
+
dl_opts = {}
|
|
190
|
+
dl_opts[:log_level] = log_level
|
|
191
|
+
logdev = @log_device
|
|
192
|
+
logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
|
|
193
|
+
log = Fluent::Log.new(logger)
|
|
85
194
|
block_called = {
|
|
86
195
|
trace: false,
|
|
87
196
|
debug: false,
|
|
@@ -110,7 +219,55 @@ class LogTest < Test::Unit::TestCase
|
|
|
110
219
|
def test_backtrace(data)
|
|
111
220
|
log_level, start = data
|
|
112
221
|
backtrace = ["line 1", "line 2", "line 3"]
|
|
113
|
-
|
|
222
|
+
logdev = @log_device
|
|
223
|
+
logger = ServerEngine::DaemonLogger.new(logdev)
|
|
224
|
+
log = Fluent::Log.new(logger)
|
|
225
|
+
log.level = log_level
|
|
226
|
+
log.trace_backtrace(backtrace)
|
|
227
|
+
log.debug_backtrace(backtrace)
|
|
228
|
+
log.info_backtrace(backtrace)
|
|
229
|
+
log.warn_backtrace(backtrace)
|
|
230
|
+
log.error_backtrace(backtrace)
|
|
231
|
+
log.fatal_backtrace(backtrace)
|
|
232
|
+
expected = [
|
|
233
|
+
" #{@timestamp_str} [trace]: line 1\n",
|
|
234
|
+
" #{@timestamp_str} [trace]: line 2\n",
|
|
235
|
+
" #{@timestamp_str} [trace]: line 3\n",
|
|
236
|
+
" #{@timestamp_str} [debug]: line 1\n",
|
|
237
|
+
" #{@timestamp_str} [debug]: line 2\n",
|
|
238
|
+
" #{@timestamp_str} [debug]: line 3\n",
|
|
239
|
+
" #{@timestamp_str} [info]: line 1\n",
|
|
240
|
+
" #{@timestamp_str} [info]: line 2\n",
|
|
241
|
+
" #{@timestamp_str} [info]: line 3\n",
|
|
242
|
+
" #{@timestamp_str} [warn]: line 1\n",
|
|
243
|
+
" #{@timestamp_str} [warn]: line 2\n",
|
|
244
|
+
" #{@timestamp_str} [warn]: line 3\n",
|
|
245
|
+
" #{@timestamp_str} [error]: line 1\n",
|
|
246
|
+
" #{@timestamp_str} [error]: line 2\n",
|
|
247
|
+
" #{@timestamp_str} [error]: line 3\n",
|
|
248
|
+
" #{@timestamp_str} [fatal]: line 1\n",
|
|
249
|
+
" #{@timestamp_str} [fatal]: line 2\n",
|
|
250
|
+
" #{@timestamp_str} [fatal]: line 3\n"
|
|
251
|
+
][start..-1]
|
|
252
|
+
assert_equal(expected, log.out.logs)
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
data(
|
|
256
|
+
trace: [ServerEngine::DaemonLogger::TRACE, 0],
|
|
257
|
+
debug: [ServerEngine::DaemonLogger::DEBUG, 3],
|
|
258
|
+
info: [ServerEngine::DaemonLogger::INFO, 6],
|
|
259
|
+
warn: [ServerEngine::DaemonLogger::WARN, 9],
|
|
260
|
+
error: [ServerEngine::DaemonLogger::ERROR, 12],
|
|
261
|
+
fatal: [ServerEngine::DaemonLogger::FATAL, 15],
|
|
262
|
+
)
|
|
263
|
+
def test_backtrace_with_serverengine_loglevel(data)
|
|
264
|
+
log_level, start = data
|
|
265
|
+
backtrace = ["line 1", "line 2", "line 3"]
|
|
266
|
+
dl_opts = {}
|
|
267
|
+
dl_opts[:log_level] = log_level
|
|
268
|
+
logdev = @log_device
|
|
269
|
+
logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
|
|
270
|
+
log = Fluent::Log.new(logger)
|
|
114
271
|
log.trace_backtrace(backtrace)
|
|
115
272
|
log.debug_backtrace(backtrace)
|
|
116
273
|
log.info_backtrace(backtrace)
|
|
@@ -144,7 +301,13 @@ class LogTest < Test::Unit::TestCase
|
|
|
144
301
|
sub_test_case "suppress repeated backtrace" do
|
|
145
302
|
def test_same_log_level
|
|
146
303
|
backtrace = ["line 1", "line 2", "line 3"]
|
|
147
|
-
|
|
304
|
+
dl_opts = {}
|
|
305
|
+
dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
|
|
306
|
+
logdev = @log_device
|
|
307
|
+
logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
|
|
308
|
+
opts = {}
|
|
309
|
+
opts[:suppress_repeated_stacktrace] = true
|
|
310
|
+
log = Fluent::Log.new(logger, opts)
|
|
148
311
|
log.trace_backtrace(backtrace)
|
|
149
312
|
log.trace_backtrace(backtrace)
|
|
150
313
|
log.trace_backtrace(backtrace + ["line 4"])
|
|
@@ -169,7 +332,13 @@ class LogTest < Test::Unit::TestCase
|
|
|
169
332
|
|
|
170
333
|
def test_different_log_level
|
|
171
334
|
backtrace = ["line 1", "line 2", "line 3"]
|
|
172
|
-
|
|
335
|
+
dl_opts = {}
|
|
336
|
+
dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
|
|
337
|
+
logdev = @log_device
|
|
338
|
+
logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
|
|
339
|
+
opts = {}
|
|
340
|
+
opts[:suppress_repeated_stacktrace] = true
|
|
341
|
+
log = Fluent::Log.new(logger, opts)
|
|
173
342
|
log.trace_backtrace(backtrace)
|
|
174
343
|
log.debug_backtrace(backtrace)
|
|
175
344
|
log.info_backtrace(backtrace)
|
|
@@ -191,7 +360,11 @@ class LogTest < Test::Unit::TestCase
|
|
|
191
360
|
end
|
|
192
361
|
|
|
193
362
|
def test_dup
|
|
194
|
-
|
|
363
|
+
dl_opts = {}
|
|
364
|
+
dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
|
|
365
|
+
logdev = @log_device
|
|
366
|
+
logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
|
|
367
|
+
log1 = Fluent::Log.new(logger)
|
|
195
368
|
log2 = log1.dup
|
|
196
369
|
log1.level = Fluent::Log::LEVEL_DEBUG
|
|
197
370
|
original_tag = log1.tag
|
|
@@ -203,13 +376,32 @@ class LogTest < Test::Unit::TestCase
|
|
|
203
376
|
end
|
|
204
377
|
|
|
205
378
|
def test_disable_events
|
|
206
|
-
|
|
379
|
+
dl_opts = {}
|
|
380
|
+
dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
|
|
381
|
+
logdev = @log_device
|
|
382
|
+
logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
|
|
383
|
+
log = Fluent::Log.new(logger)
|
|
207
384
|
engine = log.instance_variable_get("@engine")
|
|
208
385
|
mock(engine).push_log_event(anything, anything, anything).once
|
|
209
386
|
log.trace "trace log"
|
|
210
387
|
log.disable_events(Thread.current)
|
|
211
388
|
log.trace "trace log"
|
|
212
389
|
end
|
|
390
|
+
|
|
391
|
+
def test_level_reload
|
|
392
|
+
dl_opts = {}
|
|
393
|
+
dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
|
|
394
|
+
logdev = @log_device
|
|
395
|
+
logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
|
|
396
|
+
log = Fluent::Log.new(logger)
|
|
397
|
+
assert_equal(ServerEngine::DaemonLogger::TRACE, logger.level)
|
|
398
|
+
assert_equal(Fluent::Log::LEVEL_TRACE, log.level)
|
|
399
|
+
# change daemon logger side level
|
|
400
|
+
logger.level = ServerEngine::DaemonLogger::DEBUG
|
|
401
|
+
assert_equal(ServerEngine::DaemonLogger::DEBUG, logger.level)
|
|
402
|
+
# check fluentd log side level is also changed
|
|
403
|
+
assert_equal(Fluent::Log::LEVEL_DEBUG, log.level)
|
|
404
|
+
end
|
|
213
405
|
end
|
|
214
406
|
|
|
215
407
|
class PluginLoggerTest < Test::Unit::TestCase
|
|
@@ -218,10 +410,15 @@ class PluginLoggerTest < Test::Unit::TestCase
|
|
|
218
410
|
@timestamp = Time.parse("2016-04-21 11:58:41 +0900")
|
|
219
411
|
@timestamp_str = @timestamp.strftime("%Y-%m-%d %H:%M:%S %z")
|
|
220
412
|
stub(Time).now { @timestamp }
|
|
221
|
-
|
|
413
|
+
dl_opts = {}
|
|
414
|
+
dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
|
|
415
|
+
logdev = @log_device
|
|
416
|
+
logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
|
|
417
|
+
@logger = Fluent::Log.new(logger)
|
|
222
418
|
end
|
|
223
419
|
|
|
224
420
|
def teardown
|
|
421
|
+
@log_device.reset
|
|
225
422
|
Thread.current[:last_repeated_stacktrace] = nil
|
|
226
423
|
end
|
|
227
424
|
|
|
@@ -305,22 +502,29 @@ class PluginLoggerTest < Test::Unit::TestCase
|
|
|
305
502
|
@log.write("log")
|
|
306
503
|
end
|
|
307
504
|
|
|
308
|
-
def test_write_alias
|
|
309
|
-
assert(@log.respond_to?(:<<))
|
|
310
|
-
mock(@log.out).write("log")
|
|
311
|
-
@log << "log"
|
|
312
|
-
end
|
|
313
|
-
|
|
314
505
|
def test_out
|
|
315
506
|
assert_equal(@log.out, @logger.out)
|
|
316
507
|
@log.out = Object.new
|
|
317
508
|
assert_equal(@log.out, @logger.out)
|
|
318
509
|
end
|
|
510
|
+
|
|
511
|
+
def test_optional_header
|
|
512
|
+
assert_equal(@log.optional_header, @logger.optional_header)
|
|
513
|
+
@log.optional_header = "optional_header"
|
|
514
|
+
assert_equal(@log.optional_header, @logger.optional_header)
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
def test_optional_attrs
|
|
518
|
+
assert_equal(@log.optional_attrs, @logger.optional_attrs)
|
|
519
|
+
@log.optional_attrs = "optional_attrs"
|
|
520
|
+
assert_equal(@log.optional_attrs, @logger.optional_attrs)
|
|
521
|
+
end
|
|
319
522
|
end
|
|
320
523
|
end
|
|
321
524
|
|
|
322
525
|
class PluginLoggerMixinTest < Test::Unit::TestCase
|
|
323
|
-
class DummyPlugin < Fluent::
|
|
526
|
+
class DummyPlugin < Fluent::Plugin::TestBase
|
|
527
|
+
include Fluent::PluginHelper::EventEmitter
|
|
324
528
|
end
|
|
325
529
|
|
|
326
530
|
def create_driver(conf)
|
|
@@ -343,4 +547,23 @@ class PluginLoggerMixinTest < Test::Unit::TestCase
|
|
|
343
547
|
assert_not_equal($log.level, log.level)
|
|
344
548
|
assert_equal(Fluent::Log::LEVEL_FATAL, log.level)
|
|
345
549
|
end
|
|
550
|
+
|
|
551
|
+
def test_optional_header
|
|
552
|
+
d = create_driver(%[log_level fatal])
|
|
553
|
+
log = d.instance.log
|
|
554
|
+
assert_equal("[PluginLoggerMixinTest::DummyPlugin] ", log.optional_header)
|
|
555
|
+
assert_equal({}, log.optional_attrs)
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
def test_start
|
|
559
|
+
plugin = DummyPlugin.new
|
|
560
|
+
mock(plugin.log).reset
|
|
561
|
+
plugin.start
|
|
562
|
+
end
|
|
563
|
+
|
|
564
|
+
def test_terminate
|
|
565
|
+
plugin = DummyPlugin.new
|
|
566
|
+
mock(plugin.log).reset
|
|
567
|
+
plugin.terminate
|
|
568
|
+
end
|
|
346
569
|
end
|