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.
Files changed (252) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +6 -0
  3. data/.gitignore +2 -0
  4. data/.travis.yml +33 -21
  5. data/CONTRIBUTING.md +1 -0
  6. data/ChangeLog +810 -237
  7. data/README.md +0 -25
  8. data/Rakefile +2 -1
  9. data/Vagrantfile +17 -0
  10. data/appveyor.yml +35 -0
  11. data/example/filter_stdout.conf +5 -5
  12. data/example/in_forward.conf +2 -2
  13. data/example/in_http.conf +2 -2
  14. data/example/in_out_forward.conf +17 -0
  15. data/example/in_syslog.conf +2 -2
  16. data/example/in_tail.conf +2 -2
  17. data/example/in_tcp.conf +2 -2
  18. data/example/in_udp.conf +2 -2
  19. data/example/out_copy.conf +4 -4
  20. data/example/out_file.conf +2 -2
  21. data/example/out_forward.conf +2 -2
  22. data/example/out_forward_buf_file.conf +23 -0
  23. data/example/v0_12_filter.conf +8 -8
  24. data/fluent.conf +29 -0
  25. data/fluentd.gemspec +18 -11
  26. data/lib/fluent/agent.rb +60 -58
  27. data/lib/fluent/command/cat.rb +1 -1
  28. data/lib/fluent/command/debug.rb +7 -5
  29. data/lib/fluent/command/fluentd.rb +97 -2
  30. data/lib/fluent/compat/call_super_mixin.rb +67 -0
  31. data/lib/fluent/compat/filter.rb +50 -0
  32. data/lib/fluent/compat/formatter.rb +109 -0
  33. data/lib/fluent/compat/input.rb +50 -0
  34. data/lib/fluent/compat/output.rb +617 -0
  35. data/lib/fluent/compat/output_chain.rb +60 -0
  36. data/lib/fluent/compat/parser.rb +163 -0
  37. data/lib/fluent/compat/propagate_default.rb +62 -0
  38. data/lib/fluent/config.rb +23 -20
  39. data/lib/fluent/config/configure_proxy.rb +119 -70
  40. data/lib/fluent/config/dsl.rb +5 -18
  41. data/lib/fluent/config/element.rb +72 -8
  42. data/lib/fluent/config/error.rb +0 -3
  43. data/lib/fluent/config/literal_parser.rb +0 -2
  44. data/lib/fluent/config/parser.rb +4 -4
  45. data/lib/fluent/config/section.rb +39 -28
  46. data/lib/fluent/config/types.rb +2 -13
  47. data/lib/fluent/config/v1_parser.rb +1 -3
  48. data/lib/fluent/configurable.rb +48 -16
  49. data/lib/fluent/daemon.rb +15 -0
  50. data/lib/fluent/engine.rb +26 -52
  51. data/lib/fluent/env.rb +6 -4
  52. data/lib/fluent/event.rb +58 -11
  53. data/lib/fluent/event_router.rb +5 -5
  54. data/lib/fluent/filter.rb +2 -50
  55. data/lib/fluent/formatter.rb +4 -293
  56. data/lib/fluent/input.rb +2 -32
  57. data/lib/fluent/label.rb +2 -2
  58. data/lib/fluent/load.rb +3 -2
  59. data/lib/fluent/log.rb +107 -38
  60. data/lib/fluent/match.rb +0 -36
  61. data/lib/fluent/mixin.rb +117 -7
  62. data/lib/fluent/msgpack_factory.rb +62 -0
  63. data/lib/fluent/output.rb +7 -612
  64. data/lib/fluent/output_chain.rb +23 -0
  65. data/lib/fluent/parser.rb +4 -800
  66. data/lib/fluent/plugin.rb +100 -121
  67. data/lib/fluent/plugin/bare_output.rb +63 -0
  68. data/lib/fluent/plugin/base.rb +121 -0
  69. data/lib/fluent/plugin/buf_file.rb +101 -182
  70. data/lib/fluent/plugin/buf_memory.rb +9 -92
  71. data/lib/fluent/plugin/buffer.rb +473 -0
  72. data/lib/fluent/plugin/buffer/chunk.rb +135 -0
  73. data/lib/fluent/plugin/buffer/file_chunk.rb +339 -0
  74. data/lib/fluent/plugin/buffer/memory_chunk.rb +100 -0
  75. data/lib/fluent/plugin/exec_util.rb +80 -75
  76. data/lib/fluent/plugin/file_util.rb +33 -28
  77. data/lib/fluent/plugin/file_wrapper.rb +120 -0
  78. data/lib/fluent/plugin/filter.rb +51 -0
  79. data/lib/fluent/plugin/filter_grep.rb +13 -40
  80. data/lib/fluent/plugin/filter_record_transformer.rb +22 -18
  81. data/lib/fluent/plugin/formatter.rb +93 -0
  82. data/lib/fluent/plugin/formatter_csv.rb +48 -0
  83. data/lib/fluent/plugin/formatter_hash.rb +32 -0
  84. data/lib/fluent/plugin/formatter_json.rb +47 -0
  85. data/lib/fluent/plugin/formatter_ltsv.rb +42 -0
  86. data/lib/fluent/plugin/formatter_msgpack.rb +32 -0
  87. data/lib/fluent/plugin/formatter_out_file.rb +45 -0
  88. data/lib/fluent/plugin/formatter_single_value.rb +34 -0
  89. data/lib/fluent/plugin/formatter_stdout.rb +39 -0
  90. data/lib/fluent/plugin/in_debug_agent.rb +4 -0
  91. data/lib/fluent/plugin/in_dummy.rb +22 -18
  92. data/lib/fluent/plugin/in_exec.rb +18 -8
  93. data/lib/fluent/plugin/in_forward.rb +36 -79
  94. data/lib/fluent/plugin/in_gc_stat.rb +4 -0
  95. data/lib/fluent/plugin/in_http.rb +21 -18
  96. data/lib/fluent/plugin/in_monitor_agent.rb +15 -48
  97. data/lib/fluent/plugin/in_object_space.rb +6 -1
  98. data/lib/fluent/plugin/in_stream.rb +7 -3
  99. data/lib/fluent/plugin/in_syslog.rb +46 -95
  100. data/lib/fluent/plugin/in_tail.rb +51 -595
  101. data/lib/fluent/plugin/in_tcp.rb +8 -1
  102. data/lib/fluent/plugin/in_udp.rb +8 -14
  103. data/lib/fluent/plugin/input.rb +33 -0
  104. data/lib/fluent/plugin/multi_output.rb +95 -0
  105. data/lib/fluent/plugin/out_buffered_null.rb +59 -0
  106. data/lib/fluent/plugin/out_copy.rb +11 -7
  107. data/lib/fluent/plugin/out_exec.rb +15 -11
  108. data/lib/fluent/plugin/out_exec_filter.rb +18 -10
  109. data/lib/fluent/plugin/out_file.rb +34 -5
  110. data/lib/fluent/plugin/out_forward.rb +19 -9
  111. data/lib/fluent/plugin/out_null.rb +0 -14
  112. data/lib/fluent/plugin/out_roundrobin.rb +11 -7
  113. data/lib/fluent/plugin/out_stdout.rb +5 -7
  114. data/lib/fluent/plugin/out_stream.rb +3 -1
  115. data/lib/fluent/plugin/output.rb +979 -0
  116. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  117. data/lib/fluent/plugin/parser.rb +244 -0
  118. data/lib/fluent/plugin/parser_apache.rb +24 -0
  119. data/lib/fluent/plugin/parser_apache2.rb +84 -0
  120. data/lib/fluent/plugin/parser_apache_error.rb +21 -0
  121. data/lib/fluent/plugin/parser_csv.rb +31 -0
  122. data/lib/fluent/plugin/parser_json.rb +79 -0
  123. data/lib/fluent/plugin/parser_ltsv.rb +50 -0
  124. data/lib/fluent/plugin/parser_multiline.rb +102 -0
  125. data/lib/fluent/plugin/parser_nginx.rb +24 -0
  126. data/lib/fluent/plugin/parser_none.rb +36 -0
  127. data/lib/fluent/plugin/parser_syslog.rb +82 -0
  128. data/lib/fluent/plugin/parser_tsv.rb +37 -0
  129. data/lib/fluent/plugin/socket_util.rb +120 -114
  130. data/lib/fluent/plugin/storage.rb +84 -0
  131. data/lib/fluent/plugin/storage_local.rb +116 -0
  132. data/lib/fluent/plugin/string_util.rb +16 -13
  133. data/lib/fluent/plugin_helper.rb +39 -0
  134. data/lib/fluent/plugin_helper/child_process.rb +298 -0
  135. data/lib/fluent/plugin_helper/compat_parameters.rb +99 -0
  136. data/lib/fluent/plugin_helper/event_emitter.rb +80 -0
  137. data/lib/fluent/plugin_helper/event_loop.rb +118 -0
  138. data/lib/fluent/plugin_helper/retry_state.rb +177 -0
  139. data/lib/fluent/plugin_helper/storage.rb +308 -0
  140. data/lib/fluent/plugin_helper/thread.rb +147 -0
  141. data/lib/fluent/plugin_helper/timer.rb +85 -0
  142. data/lib/fluent/plugin_id.rb +63 -0
  143. data/lib/fluent/process.rb +21 -30
  144. data/lib/fluent/registry.rb +21 -9
  145. data/lib/fluent/root_agent.rb +115 -40
  146. data/lib/fluent/supervisor.rb +330 -320
  147. data/lib/fluent/system_config.rb +42 -18
  148. data/lib/fluent/test.rb +6 -1
  149. data/lib/fluent/test/base.rb +23 -3
  150. data/lib/fluent/test/driver/base.rb +247 -0
  151. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  152. data/lib/fluent/test/driver/filter.rb +35 -0
  153. data/lib/fluent/test/driver/input.rb +31 -0
  154. data/lib/fluent/test/driver/output.rb +78 -0
  155. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  156. data/lib/fluent/test/filter_test.rb +0 -1
  157. data/lib/fluent/test/formatter_test.rb +2 -1
  158. data/lib/fluent/test/input_test.rb +23 -17
  159. data/lib/fluent/test/output_test.rb +28 -39
  160. data/lib/fluent/test/parser_test.rb +1 -1
  161. data/lib/fluent/time.rb +104 -1
  162. data/lib/fluent/{status.rb → unique_id.rb} +15 -24
  163. data/lib/fluent/version.rb +1 -1
  164. data/lib/fluent/winsvc.rb +72 -0
  165. data/test/compat/test_calls_super.rb +164 -0
  166. data/test/config/test_config_parser.rb +83 -0
  167. data/test/config/test_configurable.rb +547 -274
  168. data/test/config/test_configure_proxy.rb +146 -29
  169. data/test/config/test_dsl.rb +3 -181
  170. data/test/config/test_element.rb +274 -0
  171. data/test/config/test_literal_parser.rb +1 -1
  172. data/test/config/test_section.rb +79 -7
  173. data/test/config/test_system_config.rb +21 -0
  174. data/test/config/test_types.rb +3 -26
  175. data/test/helper.rb +78 -8
  176. data/test/plugin/test_bare_output.rb +118 -0
  177. data/test/plugin/test_base.rb +75 -0
  178. data/test/plugin/test_buf_file.rb +420 -521
  179. data/test/plugin/test_buf_memory.rb +32 -194
  180. data/test/plugin/test_buffer.rb +981 -0
  181. data/test/plugin/test_buffer_chunk.rb +110 -0
  182. data/test/plugin/test_buffer_file_chunk.rb +770 -0
  183. data/test/plugin/test_buffer_memory_chunk.rb +265 -0
  184. data/test/plugin/test_filter.rb +255 -0
  185. data/test/plugin/test_filter_grep.rb +2 -73
  186. data/test/plugin/test_filter_record_transformer.rb +24 -68
  187. data/test/plugin/test_filter_stdout.rb +6 -6
  188. data/test/plugin/test_in_debug_agent.rb +2 -0
  189. data/test/plugin/test_in_dummy.rb +11 -17
  190. data/test/plugin/test_in_exec.rb +6 -25
  191. data/test/plugin/test_in_forward.rb +112 -151
  192. data/test/plugin/test_in_gc_stat.rb +2 -0
  193. data/test/plugin/test_in_http.rb +106 -157
  194. data/test/plugin/test_in_object_space.rb +21 -5
  195. data/test/plugin/test_in_stream.rb +14 -13
  196. data/test/plugin/test_in_syslog.rb +30 -275
  197. data/test/plugin/test_in_tail.rb +95 -234
  198. data/test/plugin/test_in_tcp.rb +14 -0
  199. data/test/plugin/test_in_udp.rb +21 -13
  200. data/test/plugin/test_input.rb +122 -0
  201. data/test/plugin/test_multi_output.rb +180 -0
  202. data/test/plugin/test_out_buffered_null.rb +79 -0
  203. data/test/plugin/test_out_copy.rb +15 -2
  204. data/test/plugin/test_out_exec.rb +75 -25
  205. data/test/plugin/test_out_exec_filter.rb +74 -8
  206. data/test/plugin/test_out_file.rb +61 -7
  207. data/test/plugin/test_out_forward.rb +92 -15
  208. data/test/plugin/test_out_roundrobin.rb +1 -0
  209. data/test/plugin/test_out_stdout.rb +22 -13
  210. data/test/plugin/test_out_stream.rb +18 -0
  211. data/test/plugin/test_output.rb +515 -0
  212. data/test/plugin/test_output_as_buffered.rb +1540 -0
  213. data/test/plugin/test_output_as_buffered_overflow.rb +247 -0
  214. data/test/plugin/test_output_as_buffered_retries.rb +808 -0
  215. data/test/plugin/test_output_as_buffered_secondary.rb +776 -0
  216. data/test/plugin/test_output_as_standard.rb +362 -0
  217. data/test/plugin/test_owned_by.rb +35 -0
  218. data/test/plugin/test_storage.rb +167 -0
  219. data/test/plugin/test_storage_local.rb +8 -0
  220. data/test/plugin_helper/test_child_process.rb +599 -0
  221. data/test/plugin_helper/test_compat_parameters.rb +175 -0
  222. data/test/plugin_helper/test_event_emitter.rb +51 -0
  223. data/test/plugin_helper/test_event_loop.rb +52 -0
  224. data/test/plugin_helper/test_retry_state.rb +399 -0
  225. data/test/plugin_helper/test_storage.rb +411 -0
  226. data/test/plugin_helper/test_thread.rb +164 -0
  227. data/test/plugin_helper/test_timer.rb +100 -0
  228. data/test/scripts/exec_script.rb +0 -6
  229. data/test/scripts/fluent/plugin/out_test.rb +3 -0
  230. data/test/test_config.rb +13 -4
  231. data/test/test_event.rb +24 -13
  232. data/test/test_event_router.rb +8 -7
  233. data/test/test_event_time.rb +187 -0
  234. data/test/test_formatter.rb +13 -51
  235. data/test/test_input.rb +1 -1
  236. data/test/test_log.rb +239 -16
  237. data/test/test_mixin.rb +1 -1
  238. data/test/test_output.rb +53 -66
  239. data/test/test_parser.rb +105 -323
  240. data/test/test_plugin_helper.rb +81 -0
  241. data/test/test_root_agent.rb +4 -52
  242. data/test/test_supervisor.rb +272 -0
  243. data/test/test_unique_id.rb +47 -0
  244. metadata +180 -54
  245. data/lib/fluent/buffer.rb +0 -365
  246. data/lib/fluent/plugin/filter_parser.rb +0 -107
  247. data/lib/fluent/plugin/in_status.rb +0 -76
  248. data/lib/fluent/test/helpers.rb +0 -86
  249. data/test/plugin/data/log/foo/bar2 +0 -0
  250. data/test/plugin/test_filter_parser.rb +0 -744
  251. data/test/plugin/test_in_status.rb +0 -38
  252. data/test/test_buffer.rb +0 -624
@@ -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
- formatter = Fluent::Test::FormatterTestDriver.new(Formatter).configure(conf)
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
- assert_nil @formatter.fields
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('fields' => 'f1', 'delimiter' => target)
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 = TextFormatter::TEMPLATE_REGISTRY.lookup('single_value').call
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 = TextFormatter::TEMPLATE_REGISTRY.lookup('single_value').call
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
- TextFormatter::TEMPLATE_REGISTRY.lookup('unknown')
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
- TextFormatter::TEMPLATE_REGISTRY.lookup(data)
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
@@ -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
@@ -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
- log = Fluent::Log.new(@log_device, log_level)
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
- log = Fluent::Log.new(@log_device, log_level)
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
- log = Fluent::Log.new(@log_device, log_level)
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
- log = Fluent::Log.new(@log_device, log_level)
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
- log = Fluent::Log.new(@log_device, Fluent::Log::LEVEL_TRACE, suppress_repeated_stacktrace: true)
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
- log = Fluent::Log.new(@log_device, Fluent::Log::LEVEL_TRACE, suppress_repeated_stacktrace: true)
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
- log1 = Fluent::Log.new(@log_device, Fluent::Log::LEVEL_TRACE)
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
- log = Fluent::Log.new(@log_device, Fluent::Log::LEVEL_TRACE)
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
- @logger = Fluent::Log.new(@log_device, Fluent::Log::LEVEL_TRACE)
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::Input
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