fluentd 0.12.40 → 1.6.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.

Files changed (428) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +39 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
  4. data/.github/ISSUE_TEMPLATE.md +17 -0
  5. data/.github/PULL_REQUEST_TEMPLATE.md +13 -0
  6. data/.gitignore +5 -0
  7. data/.gitlab/cicd-template.yaml +10 -0
  8. data/.gitlab-ci.yml +147 -0
  9. data/.travis.yml +56 -20
  10. data/ADOPTERS.md +5 -0
  11. data/CHANGELOG.md +1369 -0
  12. data/CONTRIBUTING.md +16 -5
  13. data/GOVERNANCE.md +55 -0
  14. data/Gemfile +5 -0
  15. data/GithubWorkflow.md +78 -0
  16. data/LICENSE +202 -0
  17. data/MAINTAINERS.md +7 -0
  18. data/README.md +23 -11
  19. data/Rakefile +48 -2
  20. data/Vagrantfile +17 -0
  21. data/appveyor.yml +37 -0
  22. data/bin/fluent-binlog-reader +7 -0
  23. data/bin/fluent-ca-generate +6 -0
  24. data/bin/fluent-plugin-config-format +5 -0
  25. data/bin/fluent-plugin-generate +5 -0
  26. data/bin/fluentd +3 -0
  27. data/code-of-conduct.md +3 -0
  28. data/example/copy_roundrobin.conf +39 -0
  29. data/example/counter.conf +18 -0
  30. data/example/in_dummy_blocks.conf +17 -0
  31. data/example/in_dummy_with_compression.conf +23 -0
  32. data/example/in_forward.conf +7 -0
  33. data/example/in_forward_client.conf +37 -0
  34. data/example/in_forward_shared_key.conf +15 -0
  35. data/example/in_forward_tls.conf +14 -0
  36. data/example/in_forward_users.conf +24 -0
  37. data/example/in_forward_workers.conf +21 -0
  38. data/example/in_http.conf +3 -1
  39. data/example/in_out_forward.conf +17 -0
  40. data/example/logevents.conf +25 -0
  41. data/example/multi_filters.conf +61 -0
  42. data/example/out_exec_filter.conf +42 -0
  43. data/example/out_forward.conf +13 -13
  44. data/example/out_forward_buf_file.conf +23 -0
  45. data/example/out_forward_client.conf +109 -0
  46. data/example/out_forward_heartbeat_none.conf +16 -0
  47. data/example/out_forward_shared_key.conf +36 -0
  48. data/example/out_forward_tls.conf +18 -0
  49. data/example/out_forward_users.conf +65 -0
  50. data/example/out_null.conf +36 -0
  51. data/example/secondary_file.conf +42 -0
  52. data/example/suppress_config_dump.conf +7 -0
  53. data/example/worker_section.conf +36 -0
  54. data/fluent.conf +29 -0
  55. data/fluentd.gemspec +21 -11
  56. data/lib/fluent/agent.rb +67 -90
  57. data/lib/fluent/clock.rb +62 -0
  58. data/lib/fluent/command/binlog_reader.rb +244 -0
  59. data/lib/fluent/command/ca_generate.rb +181 -0
  60. data/lib/fluent/command/cat.rb +42 -18
  61. data/lib/fluent/command/debug.rb +12 -10
  62. data/lib/fluent/command/fluentd.rb +153 -5
  63. data/lib/fluent/command/plugin_config_formatter.rb +292 -0
  64. data/lib/fluent/command/plugin_generator.rb +324 -0
  65. data/lib/fluent/compat/call_super_mixin.rb +67 -0
  66. data/lib/fluent/compat/detach_process_mixin.rb +33 -0
  67. data/lib/fluent/compat/exec_util.rb +129 -0
  68. data/lib/fluent/compat/file_util.rb +54 -0
  69. data/lib/fluent/compat/filter.rb +68 -0
  70. data/lib/fluent/compat/formatter.rb +111 -0
  71. data/lib/fluent/compat/formatter_utils.rb +85 -0
  72. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  73. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  74. data/lib/fluent/compat/input.rb +49 -0
  75. data/lib/fluent/compat/output.rb +718 -0
  76. data/lib/fluent/compat/output_chain.rb +60 -0
  77. data/lib/fluent/compat/parser.rb +310 -0
  78. data/lib/fluent/compat/parser_utils.rb +40 -0
  79. data/lib/fluent/compat/propagate_default.rb +62 -0
  80. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  81. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  82. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  83. data/lib/fluent/compat/socket_util.rb +165 -0
  84. data/lib/fluent/compat/string_util.rb +34 -0
  85. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  86. data/lib/fluent/compat/type_converter.rb +90 -0
  87. data/lib/fluent/config/configure_proxy.rb +210 -62
  88. data/lib/fluent/config/dsl.rb +12 -5
  89. data/lib/fluent/config/element.rb +107 -9
  90. data/lib/fluent/config/literal_parser.rb +9 -3
  91. data/lib/fluent/config/parser.rb +4 -4
  92. data/lib/fluent/config/section.rb +51 -14
  93. data/lib/fluent/config/types.rb +28 -13
  94. data/lib/fluent/config/v1_parser.rb +3 -5
  95. data/lib/fluent/config.rb +23 -20
  96. data/lib/fluent/configurable.rb +79 -21
  97. data/lib/fluent/counter/base_socket.rb +46 -0
  98. data/lib/fluent/counter/client.rb +297 -0
  99. data/lib/fluent/counter/error.rb +86 -0
  100. data/lib/fluent/counter/mutex_hash.rb +163 -0
  101. data/lib/fluent/counter/server.rb +273 -0
  102. data/lib/fluent/counter/store.rb +205 -0
  103. data/lib/fluent/counter/validator.rb +145 -0
  104. data/lib/fluent/counter.rb +23 -0
  105. data/lib/fluent/daemon.rb +15 -0
  106. data/lib/fluent/engine.rb +102 -65
  107. data/lib/fluent/env.rb +7 -3
  108. data/lib/fluent/error.rb +30 -0
  109. data/lib/fluent/event.rb +197 -21
  110. data/lib/fluent/event_router.rb +93 -10
  111. data/lib/fluent/filter.rb +2 -50
  112. data/lib/fluent/formatter.rb +4 -293
  113. data/lib/fluent/input.rb +2 -32
  114. data/lib/fluent/label.rb +10 -2
  115. data/lib/fluent/load.rb +3 -3
  116. data/lib/fluent/log.rb +348 -81
  117. data/lib/fluent/match.rb +37 -36
  118. data/lib/fluent/mixin.rb +12 -176
  119. data/lib/fluent/msgpack_factory.rb +62 -0
  120. data/lib/fluent/output.rb +10 -612
  121. data/lib/fluent/output_chain.rb +23 -0
  122. data/lib/fluent/parser.rb +4 -800
  123. data/lib/fluent/plugin/bare_output.rb +63 -0
  124. data/lib/fluent/plugin/base.rb +192 -0
  125. data/lib/fluent/plugin/buf_file.rb +128 -174
  126. data/lib/fluent/plugin/buf_memory.rb +9 -92
  127. data/lib/fluent/plugin/buffer/chunk.rb +221 -0
  128. data/lib/fluent/plugin/buffer/file_chunk.rb +383 -0
  129. data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
  130. data/lib/fluent/plugin/buffer.rb +779 -0
  131. data/lib/fluent/plugin/compressable.rb +92 -0
  132. data/lib/fluent/plugin/exec_util.rb +3 -108
  133. data/lib/fluent/plugin/file_util.rb +4 -34
  134. data/lib/fluent/plugin/file_wrapper.rb +120 -0
  135. data/lib/fluent/plugin/filter.rb +93 -0
  136. data/lib/fluent/plugin/filter_grep.rb +117 -34
  137. data/lib/fluent/plugin/filter_parser.rb +85 -62
  138. data/lib/fluent/plugin/filter_record_transformer.rb +27 -39
  139. data/lib/fluent/plugin/filter_stdout.rb +15 -12
  140. data/lib/fluent/plugin/formatter.rb +50 -0
  141. data/lib/fluent/plugin/formatter_csv.rb +52 -0
  142. data/lib/fluent/plugin/formatter_hash.rb +33 -0
  143. data/lib/fluent/plugin/formatter_json.rb +55 -0
  144. data/lib/fluent/plugin/formatter_ltsv.rb +42 -0
  145. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  146. data/lib/fluent/plugin/formatter_out_file.rb +51 -0
  147. data/lib/fluent/plugin/formatter_single_value.rb +34 -0
  148. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  149. data/lib/fluent/plugin/formatter_tsv.rb +38 -0
  150. data/lib/fluent/plugin/in_debug_agent.rb +17 -6
  151. data/lib/fluent/plugin/in_dummy.rb +47 -20
  152. data/lib/fluent/plugin/in_exec.rb +55 -123
  153. data/lib/fluent/plugin/in_forward.rb +299 -216
  154. data/lib/fluent/plugin/in_gc_stat.rb +14 -36
  155. data/lib/fluent/plugin/in_http.rb +204 -91
  156. data/lib/fluent/plugin/in_monitor_agent.rb +186 -258
  157. data/lib/fluent/plugin/in_object_space.rb +13 -41
  158. data/lib/fluent/plugin/in_syslog.rb +112 -134
  159. data/lib/fluent/plugin/in_tail.rb +408 -745
  160. data/lib/fluent/plugin/in_tcp.rb +66 -9
  161. data/lib/fluent/plugin/in_udp.rb +60 -11
  162. data/lib/fluent/plugin/{in_stream.rb → in_unix.rb} +8 -4
  163. data/lib/fluent/plugin/input.rb +37 -0
  164. data/lib/fluent/plugin/multi_output.rb +158 -0
  165. data/lib/fluent/plugin/out_copy.rb +23 -35
  166. data/lib/fluent/plugin/out_exec.rb +67 -70
  167. data/lib/fluent/plugin/out_exec_filter.rb +204 -271
  168. data/lib/fluent/plugin/out_file.rb +267 -73
  169. data/lib/fluent/plugin/out_forward.rb +854 -325
  170. data/lib/fluent/plugin/out_null.rb +42 -9
  171. data/lib/fluent/plugin/out_relabel.rb +9 -5
  172. data/lib/fluent/plugin/out_roundrobin.rb +18 -37
  173. data/lib/fluent/plugin/out_secondary_file.rb +133 -0
  174. data/lib/fluent/plugin/out_stdout.rb +43 -10
  175. data/lib/fluent/plugin/out_stream.rb +7 -2
  176. data/lib/fluent/plugin/output.rb +1498 -0
  177. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  178. data/lib/fluent/plugin/parser.rb +191 -0
  179. data/lib/fluent/plugin/parser_apache.rb +28 -0
  180. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  181. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  182. data/lib/fluent/plugin/parser_csv.rb +39 -0
  183. data/lib/fluent/plugin/parser_json.rb +94 -0
  184. data/lib/fluent/plugin/parser_ltsv.rb +49 -0
  185. data/lib/fluent/plugin/parser_msgpack.rb +50 -0
  186. data/lib/fluent/plugin/parser_multiline.rb +106 -0
  187. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  188. data/lib/fluent/plugin/parser_none.rb +36 -0
  189. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  190. data/lib/fluent/plugin/parser_syslog.rb +142 -0
  191. data/lib/fluent/plugin/parser_tsv.rb +42 -0
  192. data/lib/fluent/plugin/socket_util.rb +3 -143
  193. data/lib/fluent/plugin/storage.rb +84 -0
  194. data/lib/fluent/plugin/storage_local.rb +164 -0
  195. data/lib/fluent/plugin/string_util.rb +3 -15
  196. data/lib/fluent/plugin.rb +122 -121
  197. data/lib/fluent/plugin_helper/cert_option.rb +178 -0
  198. data/lib/fluent/plugin_helper/child_process.rb +364 -0
  199. data/lib/fluent/plugin_helper/compat_parameters.rb +333 -0
  200. data/lib/fluent/plugin_helper/counter.rb +51 -0
  201. data/lib/fluent/plugin_helper/event_emitter.rb +93 -0
  202. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  203. data/lib/fluent/plugin_helper/extract.rb +104 -0
  204. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  205. data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
  206. data/lib/fluent/plugin_helper/http_server/compat/server.rb +81 -0
  207. data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
  208. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  209. data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
  210. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  211. data/lib/fluent/plugin_helper/http_server/server.rb +87 -0
  212. data/lib/fluent/plugin_helper/http_server.rb +76 -0
  213. data/lib/fluent/plugin_helper/inject.rb +151 -0
  214. data/lib/fluent/plugin_helper/parser.rb +147 -0
  215. data/lib/fluent/plugin_helper/record_accessor.rb +210 -0
  216. data/lib/fluent/plugin_helper/retry_state.rb +205 -0
  217. data/lib/fluent/plugin_helper/server.rb +807 -0
  218. data/lib/fluent/plugin_helper/socket.rb +250 -0
  219. data/lib/fluent/plugin_helper/socket_option.rb +80 -0
  220. data/lib/fluent/plugin_helper/storage.rb +349 -0
  221. data/lib/fluent/plugin_helper/thread.rb +179 -0
  222. data/lib/fluent/plugin_helper/timer.rb +92 -0
  223. data/lib/fluent/plugin_helper.rb +73 -0
  224. data/lib/fluent/plugin_id.rb +80 -0
  225. data/lib/fluent/process.rb +3 -489
  226. data/lib/fluent/registry.rb +52 -10
  227. data/lib/fluent/root_agent.rb +204 -42
  228. data/lib/fluent/supervisor.rb +597 -359
  229. data/lib/fluent/system_config.rb +131 -42
  230. data/lib/fluent/test/base.rb +6 -54
  231. data/lib/fluent/test/driver/base.rb +224 -0
  232. data/lib/fluent/test/driver/base_owned.rb +70 -0
  233. data/lib/fluent/test/driver/base_owner.rb +135 -0
  234. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  235. data/lib/fluent/test/driver/filter.rb +57 -0
  236. data/lib/fluent/test/driver/formatter.rb +30 -0
  237. data/lib/fluent/test/driver/input.rb +31 -0
  238. data/lib/fluent/test/driver/multi_output.rb +53 -0
  239. data/lib/fluent/test/driver/output.rb +102 -0
  240. data/lib/fluent/test/driver/parser.rb +30 -0
  241. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  242. data/lib/fluent/test/filter_test.rb +0 -1
  243. data/lib/fluent/test/formatter_test.rb +4 -1
  244. data/lib/fluent/test/helpers.rb +58 -10
  245. data/lib/fluent/test/input_test.rb +27 -19
  246. data/lib/fluent/test/log.rb +79 -0
  247. data/lib/fluent/test/output_test.rb +28 -39
  248. data/lib/fluent/test/parser_test.rb +3 -1
  249. data/lib/fluent/test/startup_shutdown.rb +46 -0
  250. data/lib/fluent/test.rb +33 -1
  251. data/lib/fluent/time.rb +450 -1
  252. data/lib/fluent/timezone.rb +27 -3
  253. data/lib/fluent/{status.rb → unique_id.rb} +15 -24
  254. data/lib/fluent/version.rb +1 -1
  255. data/lib/fluent/winsvc.rb +85 -0
  256. data/templates/new_gem/Gemfile +3 -0
  257. data/templates/new_gem/README.md.erb +43 -0
  258. data/templates/new_gem/Rakefile +13 -0
  259. data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
  260. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  261. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  262. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  263. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  264. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  265. data/templates/new_gem/test/helper.rb.erb +8 -0
  266. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  267. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  268. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  269. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  270. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  271. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  272. data/templates/plugin_config_formatter/param.md.erb +34 -0
  273. data/templates/plugin_config_formatter/section.md.erb +12 -0
  274. data/test/command/test_binlog_reader.rb +346 -0
  275. data/test/command/test_ca_generate.rb +70 -0
  276. data/test/command/test_fluentd.rb +901 -0
  277. data/test/command/test_plugin_config_formatter.rb +276 -0
  278. data/test/command/test_plugin_generator.rb +92 -0
  279. data/test/compat/test_calls_super.rb +166 -0
  280. data/test/compat/test_parser.rb +92 -0
  281. data/test/config/test_config_parser.rb +126 -2
  282. data/test/config/test_configurable.rb +946 -187
  283. data/test/config/test_configure_proxy.rb +424 -74
  284. data/test/config/test_dsl.rb +11 -11
  285. data/test/config/test_element.rb +500 -0
  286. data/test/config/test_literal_parser.rb +8 -0
  287. data/test/config/test_plugin_configuration.rb +56 -0
  288. data/test/config/test_section.rb +79 -7
  289. data/test/config/test_system_config.rb +122 -35
  290. data/test/config/test_types.rb +38 -0
  291. data/test/counter/test_client.rb +559 -0
  292. data/test/counter/test_error.rb +44 -0
  293. data/test/counter/test_mutex_hash.rb +179 -0
  294. data/test/counter/test_server.rb +589 -0
  295. data/test/counter/test_store.rb +258 -0
  296. data/test/counter/test_validator.rb +137 -0
  297. data/test/helper.rb +89 -6
  298. data/test/helpers/fuzzy_assert.rb +89 -0
  299. data/test/plugin/test_bare_output.rb +118 -0
  300. data/test/plugin/test_base.rb +115 -0
  301. data/test/plugin/test_buf_file.rb +823 -460
  302. data/test/plugin/test_buf_memory.rb +32 -194
  303. data/test/plugin/test_buffer.rb +1233 -0
  304. data/test/plugin/test_buffer_chunk.rb +198 -0
  305. data/test/plugin/test_buffer_file_chunk.rb +844 -0
  306. data/test/plugin/test_buffer_memory_chunk.rb +338 -0
  307. data/test/plugin/test_compressable.rb +84 -0
  308. data/test/plugin/test_filter.rb +357 -0
  309. data/test/plugin/test_filter_grep.rb +540 -29
  310. data/test/plugin/test_filter_parser.rb +439 -452
  311. data/test/plugin/test_filter_record_transformer.rb +123 -166
  312. data/test/plugin/test_filter_stdout.rb +160 -72
  313. data/test/plugin/test_formatter_csv.rb +111 -0
  314. data/test/plugin/test_formatter_hash.rb +35 -0
  315. data/test/plugin/test_formatter_json.rb +51 -0
  316. data/test/plugin/test_formatter_ltsv.rb +62 -0
  317. data/test/plugin/test_formatter_msgpack.rb +28 -0
  318. data/test/plugin/test_formatter_out_file.rb +95 -0
  319. data/test/plugin/test_formatter_single_value.rb +38 -0
  320. data/test/plugin/test_formatter_tsv.rb +68 -0
  321. data/test/plugin/test_in_debug_agent.rb +24 -1
  322. data/test/plugin/test_in_dummy.rb +111 -18
  323. data/test/plugin/test_in_exec.rb +200 -113
  324. data/test/plugin/test_in_forward.rb +990 -387
  325. data/test/plugin/test_in_gc_stat.rb +10 -8
  326. data/test/plugin/test_in_http.rb +600 -224
  327. data/test/plugin/test_in_monitor_agent.rb +690 -0
  328. data/test/plugin/test_in_object_space.rb +24 -8
  329. data/test/plugin/test_in_syslog.rb +154 -215
  330. data/test/plugin/test_in_tail.rb +1006 -707
  331. data/test/plugin/test_in_tcp.rb +125 -48
  332. data/test/plugin/test_in_udp.rb +204 -63
  333. data/test/plugin/{test_in_stream.rb → test_in_unix.rb} +14 -13
  334. data/test/plugin/test_input.rb +126 -0
  335. data/test/plugin/test_metadata.rb +89 -0
  336. data/test/plugin/test_multi_output.rb +180 -0
  337. data/test/plugin/test_out_copy.rb +117 -112
  338. data/test/plugin/test_out_exec.rb +258 -53
  339. data/test/plugin/test_out_exec_filter.rb +538 -115
  340. data/test/plugin/test_out_file.rb +865 -178
  341. data/test/plugin/test_out_forward.rb +998 -210
  342. data/test/plugin/test_out_null.rb +105 -0
  343. data/test/plugin/test_out_relabel.rb +28 -0
  344. data/test/plugin/test_out_roundrobin.rb +36 -29
  345. data/test/plugin/test_out_secondary_file.rb +458 -0
  346. data/test/plugin/test_out_stdout.rb +135 -37
  347. data/test/plugin/test_out_stream.rb +18 -0
  348. data/test/plugin/test_output.rb +984 -0
  349. data/test/plugin/test_output_as_buffered.rb +2021 -0
  350. data/test/plugin/test_output_as_buffered_backup.rb +312 -0
  351. data/test/plugin/test_output_as_buffered_compress.rb +165 -0
  352. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  353. data/test/plugin/test_output_as_buffered_retries.rb +911 -0
  354. data/test/plugin/test_output_as_buffered_secondary.rb +874 -0
  355. data/test/plugin/test_output_as_standard.rb +374 -0
  356. data/test/plugin/test_owned_by.rb +35 -0
  357. data/test/plugin/test_parser.rb +359 -0
  358. data/test/plugin/test_parser_apache.rb +42 -0
  359. data/test/plugin/test_parser_apache2.rb +47 -0
  360. data/test/plugin/test_parser_apache_error.rb +45 -0
  361. data/test/plugin/test_parser_csv.rb +103 -0
  362. data/test/plugin/test_parser_json.rb +138 -0
  363. data/test/plugin/test_parser_labeled_tsv.rb +145 -0
  364. data/test/plugin/test_parser_multiline.rb +100 -0
  365. data/test/plugin/test_parser_nginx.rb +88 -0
  366. data/test/plugin/test_parser_none.rb +52 -0
  367. data/test/plugin/test_parser_regexp.rb +289 -0
  368. data/test/plugin/test_parser_syslog.rb +441 -0
  369. data/test/plugin/test_parser_tsv.rb +122 -0
  370. data/test/plugin/test_storage.rb +167 -0
  371. data/test/plugin/test_storage_local.rb +335 -0
  372. data/test/plugin_helper/data/cert/cert-key.pem +27 -0
  373. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
  374. data/test/plugin_helper/data/cert/cert.pem +19 -0
  375. data/test/plugin_helper/http_server/test_app.rb +65 -0
  376. data/test/plugin_helper/http_server/test_route.rb +32 -0
  377. data/test/plugin_helper/test_cert_option.rb +16 -0
  378. data/test/plugin_helper/test_child_process.rb +794 -0
  379. data/test/plugin_helper/test_compat_parameters.rb +353 -0
  380. data/test/plugin_helper/test_event_emitter.rb +51 -0
  381. data/test/plugin_helper/test_event_loop.rb +52 -0
  382. data/test/plugin_helper/test_extract.rb +194 -0
  383. data/test/plugin_helper/test_formatter.rb +255 -0
  384. data/test/plugin_helper/test_http_server_helper.rb +205 -0
  385. data/test/plugin_helper/test_inject.rb +519 -0
  386. data/test/plugin_helper/test_parser.rb +264 -0
  387. data/test/plugin_helper/test_record_accessor.rb +197 -0
  388. data/test/plugin_helper/test_retry_state.rb +442 -0
  389. data/test/plugin_helper/test_server.rb +1714 -0
  390. data/test/plugin_helper/test_storage.rb +542 -0
  391. data/test/plugin_helper/test_thread.rb +164 -0
  392. data/test/plugin_helper/test_timer.rb +132 -0
  393. data/test/scripts/exec_script.rb +0 -6
  394. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
  395. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
  396. data/test/scripts/fluent/plugin/out_test.rb +23 -15
  397. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  398. data/test/test_clock.rb +164 -0
  399. data/test/test_config.rb +16 -7
  400. data/test/test_configdsl.rb +2 -2
  401. data/test/test_event.rb +360 -13
  402. data/test/test_event_router.rb +108 -11
  403. data/test/test_event_time.rb +199 -0
  404. data/test/test_filter.rb +48 -6
  405. data/test/test_formatter.rb +11 -391
  406. data/test/test_input.rb +1 -1
  407. data/test/test_log.rb +591 -31
  408. data/test/test_mixin.rb +1 -1
  409. data/test/test_output.rb +121 -185
  410. data/test/test_plugin.rb +251 -0
  411. data/test/test_plugin_classes.rb +177 -10
  412. data/test/test_plugin_helper.rb +81 -0
  413. data/test/test_plugin_id.rb +101 -0
  414. data/test/test_process.rb +8 -42
  415. data/test/test_root_agent.rb +766 -21
  416. data/test/test_supervisor.rb +481 -0
  417. data/test/test_test_drivers.rb +135 -0
  418. data/test/test_time_formatter.rb +282 -0
  419. data/test/test_time_parser.rb +231 -0
  420. data/test/test_unique_id.rb +47 -0
  421. metadata +454 -60
  422. data/COPYING +0 -14
  423. data/ChangeLog +0 -666
  424. data/lib/fluent/buffer.rb +0 -365
  425. data/lib/fluent/plugin/in_status.rb +0 -76
  426. data/test/plugin/test_in_status.rb +0 -38
  427. data/test/test_buffer.rb +0 -624
  428. data/test/test_parser.rb +0 -1305
@@ -0,0 +1,60 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'singleton'
18
+
19
+ module Fluent
20
+ module Compat
21
+ # TODO: remove when old plugin API are removed
22
+ class NullOutputChain
23
+ include Singleton
24
+
25
+ def next
26
+ end
27
+ end
28
+
29
+ class OutputChain
30
+ def initialize(array, tag, es, chain=NullOutputChain.instance)
31
+ @array = array
32
+ @tag = tag
33
+ @es = es
34
+ @offset = 0
35
+ @chain = chain
36
+ end
37
+
38
+ def next
39
+ if @array.length <= @offset
40
+ return @chain.next
41
+ end
42
+ @offset += 1
43
+ @array[@offset-1].emit_events(@tag, @es)
44
+ self.next
45
+ end
46
+ end
47
+
48
+ class CopyOutputChain < OutputChain
49
+ def next
50
+ if @array.length <= @offset
51
+ return @chain.next
52
+ end
53
+ @offset += 1
54
+ es = @array.length > @offset ? @es.dup : @es
55
+ @array[@offset-1].emit_events(@tag, es)
56
+ self.next
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,310 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/plugin'
18
+ require 'fluent/plugin/parser'
19
+ require 'fluent/mixin'
20
+
21
+ require 'fluent/config'
22
+ require 'fluent/compat/type_converter'
23
+
24
+ require 'fluent/plugin/parser_regexp'
25
+ require 'fluent/plugin/parser_json'
26
+ require 'fluent/plugin/parser_tsv'
27
+ require 'fluent/plugin/parser_ltsv'
28
+ require 'fluent/plugin/parser_csv'
29
+ require 'fluent/plugin/parser_none'
30
+ require 'fluent/plugin/parser_apache2'
31
+ require 'fluent/plugin/parser_syslog'
32
+ require 'fluent/plugin/parser_multiline'
33
+
34
+ module Fluent
35
+ module Compat
36
+ class Parser < Fluent::Plugin::Parser
37
+ # TODO: warn when deprecated
38
+ end
39
+
40
+ class TextParser
41
+ # Keep backward compatibility for existing plugins
42
+ ParserError = Fluent::Plugin::Parser::ParserError
43
+ # TODO: will be removed at v1
44
+ TypeConverter = Fluent::TypeConverter
45
+
46
+ def initialize
47
+ # TODO: warn when deprecated
48
+ @parser = nil
49
+ @estimate_current_event = nil
50
+ end
51
+
52
+ attr_reader :parser
53
+
54
+ # SET false BEFORE CONFIGURE, to return nil when time not parsed
55
+ # 'configure()' may raise errors for unexpected configurations
56
+ attr_accessor :estimate_current_event
57
+
58
+ def configure(conf, required=true)
59
+ format = conf['format']
60
+
61
+ @parser = TextParser.lookup(format)
62
+
63
+ if @parser.respond_to?(:configure)
64
+ @parser.configure(conf)
65
+ end
66
+ if !@estimate_current_event.nil? && @parser.respond_to?(:'estimate_current_event=')
67
+ # external code sets parser.estimate_current_event = false
68
+ @parser.estimate_current_event = @estimate_current_event
69
+ end
70
+
71
+ return true
72
+ end
73
+
74
+ def parse(text, &block)
75
+ if block
76
+ @parser.parse(text, &block)
77
+ else
78
+ @parser.parse(text) { |time, record|
79
+ return time, record
80
+ }
81
+ end
82
+ end
83
+
84
+ def self.register_template(type, template, time_format=nil)
85
+ # TODO: warn when deprecated to use Plugin.register_parser directly
86
+ if template.is_a?(Class) || template.respond_to?(:call)
87
+ Fluent::Plugin.register_parser(type, template)
88
+ elsif template.is_a?(Regexp)
89
+ Fluent::Plugin.register_parser(type, Proc.new { RegexpParser.new(template, {'time_format' => time_format}) })
90
+ else
91
+ raise ArgumentError, "Template for parser must be a Class, callable object or regular expression object"
92
+ end
93
+ end
94
+
95
+ def self.lookup(format)
96
+ # TODO: warn when deprecated to use Plugin.new_parser or RegexpParser.new directly
97
+ if format.nil?
98
+ raise ConfigError, "'format' parameter is required"
99
+ end
100
+
101
+ if format[0] == ?/ && format[format.length-1] == ?/
102
+ # regexp
103
+ begin
104
+ regexp = Regexp.new(format[1..-2])
105
+ if regexp.named_captures.empty?
106
+ raise "No named captures"
107
+ end
108
+ rescue
109
+ raise ConfigError, "Invalid regexp '#{format[1..-2]}': #{$!}"
110
+ end
111
+
112
+ RegexpParser.new(regexp)
113
+ else
114
+ # built-in template
115
+ begin
116
+ Fluent::Plugin.new_parser(format)
117
+ rescue ConfigError # keep same error message
118
+ raise ConfigError, "Unknown format template '#{format}'"
119
+ end
120
+ end
121
+ end
122
+
123
+ module TypeConverterCompatParameters
124
+ def convert_type_converter_parameters!(conf)
125
+ if conf["types"]
126
+ delimiter = conf["types_delimiter"] || ','
127
+ label_delimiter = conf["types_label_delimiter"] || ':'
128
+ types = {}
129
+ conf['types'].split(delimiter).each do |pair|
130
+ key, value = pair.split(label_delimiter, 2)
131
+ if value.start_with?("time#{label_delimiter}")
132
+ value = value.split(label_delimiter, 2).join(':')
133
+ elsif value.start_with?("array#{label_delimiter}")
134
+ value = value.split(label_delimiter, 2).join(':')
135
+ end
136
+ types[key] = value
137
+ end
138
+ conf["types"] = JSON.dump(types)
139
+ end
140
+ end
141
+ end
142
+
143
+ class TimeParser < Fluent::TimeParser
144
+ # TODO: warn when deprecated
145
+ end
146
+
147
+ class RegexpParser < Fluent::Plugin::RegexpParser
148
+ include TypeConverterCompatParameters
149
+
150
+ # TODO: warn when deprecated
151
+ def initialize(regexp, conf = {})
152
+ super()
153
+
154
+ @stored_regexp = regexp
155
+ @manually_configured = false
156
+ unless conf.empty?
157
+ conf_init = if conf.is_a?(Fluent::Config::Element)
158
+ conf
159
+ else
160
+ Fluent::Config::Element.new('parse', '', conf, [])
161
+ end
162
+ self.configure(conf_init)
163
+ @manually_configured = true
164
+ end
165
+ end
166
+
167
+ def configure(conf)
168
+ return if @manually_configured # not to run twice
169
+
170
+ conf['expression'] ||= @stored_regexp.source
171
+ conf['ignorecase'] ||= @stored_regexp.options & Regexp::IGNORECASE != 0
172
+ conf['multiline'] ||= @stored_regexp.options & Regexp::MULTILINE != 0
173
+ convert_type_converter_parameters!(conf)
174
+
175
+ super
176
+ end
177
+
178
+ def patterns
179
+ {'format' => @regexp, 'time_format' => @time_format}
180
+ end
181
+ end
182
+
183
+ class ValuesParser < Parser
184
+ include Fluent::Compat::TypeConverter
185
+
186
+ config_param :keys, :array, default: []
187
+ config_param :time_key, :string, default: nil
188
+ config_param :null_value_pattern, :string, default: nil
189
+ config_param :null_empty_string, :bool, default: false
190
+
191
+ def configure(conf)
192
+ super
193
+
194
+ if @time_key && !@keys.include?(@time_key) && @estimate_current_event
195
+ raise Fluent::ConfigError, "time_key (#{@time_key.inspect}) is not included in keys (#{@keys.inspect})"
196
+ end
197
+
198
+ if @time_format && !@time_key
199
+ raise Fluent::ConfigError, "time_format parameter is ignored because time_key parameter is not set. at #{conf.inspect}"
200
+ end
201
+
202
+ @time_parser = time_parser_create
203
+
204
+ if @null_value_pattern
205
+ @null_value_pattern = Regexp.new(@null_value_pattern)
206
+ end
207
+
208
+ @mutex = Mutex.new
209
+ end
210
+
211
+ def values_map(values)
212
+ record = Hash[keys.zip(values.map { |value| convert_value_to_nil(value) })]
213
+
214
+ if @time_key
215
+ value = @keep_time_key ? record[@time_key] : record.delete(@time_key)
216
+ time = if value.nil?
217
+ if @estimate_current_event
218
+ Fluent::EventTime.now
219
+ else
220
+ nil
221
+ end
222
+ else
223
+ @mutex.synchronize { @time_parser.parse(value) }
224
+ end
225
+ elsif @estimate_current_event
226
+ time = Fluent::EventTime.now
227
+ else
228
+ time = nil
229
+ end
230
+
231
+ convert_field_type!(record) if @type_converters
232
+
233
+ return time, record
234
+ end
235
+
236
+ private
237
+
238
+ def convert_field_type!(record)
239
+ @type_converters.each_key { |key|
240
+ if value = record[key]
241
+ record[key] = convert_type(key, value)
242
+ end
243
+ }
244
+ end
245
+
246
+ def convert_value_to_nil(value)
247
+ if value and @null_empty_string
248
+ value = (value == '') ? nil : value
249
+ end
250
+ if value and @null_value_pattern
251
+ value = ::Fluent::StringUtil.match_regexp(@null_value_pattern, value) ? nil : value
252
+ end
253
+ value
254
+ end
255
+ end
256
+
257
+ class JSONParser < Fluent::Plugin::JSONParser
258
+ include TypeConverterCompatParameters
259
+ # TODO: warn when deprecated
260
+ def configure(conf)
261
+ convert_type_converter_parameters!(conf)
262
+ super
263
+ end
264
+ end
265
+
266
+ class TSVParser < Fluent::Plugin::TSVParser
267
+ include TypeConverterCompatParameters
268
+ # TODO: warn when deprecated
269
+ def configure(conf)
270
+ convert_type_converter_parameters!(conf)
271
+ super
272
+ end
273
+ end
274
+
275
+ class LabeledTSVParser < Fluent::Plugin::LabeledTSVParser
276
+ include TypeConverterCompatParameters
277
+ # TODO: warn when deprecated
278
+ def configure(conf)
279
+ convert_type_converter_parameters!(conf)
280
+ super
281
+ end
282
+ end
283
+
284
+ class CSVParser < Fluent::Plugin::CSVParser
285
+ include TypeConverterCompatParameters
286
+ # TODO: warn when deprecated
287
+ def configure(conf)
288
+ convert_type_converter_parameters!(conf)
289
+ super
290
+ end
291
+ end
292
+
293
+ class NoneParser < Fluent::Plugin::NoneParser
294
+ # TODO: warn when deprecated
295
+ end
296
+
297
+ class ApacheParser < Fluent::Plugin::Apache2Parser
298
+ # TODO: warn when deprecated
299
+ end
300
+
301
+ class SyslogParser < Fluent::Plugin::SyslogParser
302
+ # TODO: warn when deprecated
303
+ end
304
+
305
+ class MultilineParser < Fluent::Plugin::MultilineParser
306
+ # TODO: warn when deprecated
307
+ end
308
+ end
309
+ end
310
+ end
@@ -0,0 +1,40 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/plugin_helper/compat_parameters'
18
+
19
+ module Fluent
20
+ module Compat
21
+ module ParserUtils
22
+ PARSER_PARAMS = Fluent::PluginHelper::CompatParameters::PARSER_PARAMS
23
+
24
+ def self.convert_parser_conf(conf)
25
+ return if conf.elements(name: 'parse').first
26
+
27
+ parser_params = {}
28
+ PARSER_PARAMS.each do |older, newer|
29
+ next unless newer
30
+ if conf.has_key?(older)
31
+ parser_params[newer] = conf[older]
32
+ end
33
+ end
34
+ unless parser_params.empty?
35
+ conf.elements << Fluent::Config::Element.new('parse', '', parser_params, [])
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,62 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/configurable'
18
+
19
+ module Fluent
20
+ module Compat
21
+ module PropagateDefault
22
+ # This mixin is to prepend to 3rd party plugins of v0.12 APIs.
23
+ # 3rd party plugins may override default values of some parameters, like `buffer_type`.
24
+ # But default values of such parameters will NOT used, but defaults of <buffer>@type</buffer>
25
+ # will be used in fact. It should bring troubles.
26
+ # This mixin defines Class method .config_param and .config_set_default (which should be used by extend)
27
+ # to propagate changes of default values to subsections.
28
+ def self.included(mod)
29
+ mod.extend(ClassMethods)
30
+ end
31
+
32
+ module ClassMethods
33
+ CONFIGURABLE_CLASS_METHODS = Fluent::Configurable::ClassMethods
34
+
35
+ def config_param(name, type = nil, **kwargs, &block)
36
+ CONFIGURABLE_CLASS_METHODS.instance_method(:config_param).bind(self).call(name, type, **kwargs, &block)
37
+ pparams = propagate_default_params
38
+ if kwargs.has_key?(:default) && pparams[name.to_s]
39
+ newer = pparams[name.to_s].to_sym
40
+ overridden_default_value = kwargs[:default]
41
+
42
+ CONFIGURABLE_CLASS_METHODS.instance_method(:config_section).bind(self).call(:buffer) do
43
+ config_set_default newer, overridden_default_value
44
+ end
45
+ end
46
+ end
47
+
48
+ def config_set_default(name, defval)
49
+ CONFIGURABLE_CLASS_METHODS.instance_method(:config_set_default).bind(self).call(name, defval)
50
+ pparams = propagate_default_params
51
+ if pparams[name.to_s]
52
+ newer = pparams[name.to_s].to_sym
53
+
54
+ CONFIGURABLE_CLASS_METHODS.instance_method(:config_section).bind(self).call(:buffer) do
55
+ self.config_set_default newer, defval
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,34 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ module Fluent
18
+ module Compat
19
+ module RecordFilterMixin
20
+ def filter_record(tag, time, record)
21
+ end
22
+
23
+ def format_stream(tag, es)
24
+ out = ''
25
+ es.each {|time,record|
26
+ tag_temp = tag.dup
27
+ filter_record(tag_temp, time, record)
28
+ out << format(tag_temp, time, record)
29
+ }
30
+ out
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,50 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/config/error'
18
+ require 'fluent/config/types'
19
+ require 'fluent/compat/record_filter_mixin'
20
+
21
+ module Fluent
22
+ module Compat
23
+ module SetTagKeyMixin
24
+ include RecordFilterMixin
25
+
26
+ attr_accessor :include_tag_key, :tag_key
27
+
28
+ def configure(conf)
29
+ @include_tag_key = false
30
+
31
+ super
32
+
33
+ if s = conf['include_tag_key']
34
+ include_tag_key = Fluent::Config.bool_value(s)
35
+ raise Fluent::ConfigError, "Invalid boolean expression '#{s}' for include_tag_key parameter" if include_tag_key.nil?
36
+
37
+ @include_tag_key = include_tag_key
38
+ end
39
+
40
+ @tag_key = conf['tag_key'] || 'tag' if @include_tag_key
41
+ end
42
+
43
+ def filter_record(tag, time, record)
44
+ super
45
+
46
+ record[@tag_key] = tag if @include_tag_key
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,69 @@
1
+ #
2
+ # Fluentd
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'fluent/config/error'
18
+ require 'fluent/compat/record_filter_mixin'
19
+ require 'fluent/time'
20
+ require 'fluent/timezone'
21
+
22
+ module Fluent
23
+ module Compat
24
+ module SetTimeKeyMixin
25
+ include RecordFilterMixin
26
+
27
+ attr_accessor :include_time_key, :time_key, :localtime, :timezone
28
+
29
+ def configure(conf)
30
+ @include_time_key = false
31
+ @localtime = false
32
+ @timezone = nil
33
+
34
+ super
35
+
36
+ if s = conf['include_time_key']
37
+ include_time_key = Fluent::Config.bool_value(s)
38
+ raise Fluent::ConfigError, "Invalid boolean expression '#{s}' for include_time_key parameter" if include_time_key.nil?
39
+
40
+ @include_time_key = include_time_key
41
+ end
42
+
43
+ if @include_time_key
44
+ @time_key = conf['time_key'] || 'time'
45
+ @time_format = conf['time_format']
46
+
47
+ if conf['localtime']
48
+ @localtime = true
49
+ elsif conf['utc']
50
+ @localtime = false
51
+ end
52
+
53
+ if conf['timezone']
54
+ @timezone = conf['timezone']
55
+ Fluent::Timezone.validate!(@timezone)
56
+ end
57
+
58
+ @timef = Fluent::TimeFormatter.new(@time_format, @localtime, @timezone)
59
+ end
60
+ end
61
+
62
+ def filter_record(tag, time, record)
63
+ super
64
+
65
+ record[@time_key] = @timef.format(time) if @include_time_key
66
+ end
67
+ end
68
+ end
69
+ end