fluentd 1.14.4-x64-mingw-ucrt

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.

Potentially problematic release.


This version of fluentd might be problematic. Click here for more details.

Files changed (558) hide show
  1. checksums.yaml +7 -0
  2. data/.deepsource.toml +13 -0
  3. data/.drone.yml +35 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.yaml +70 -0
  5. data/.github/ISSUE_TEMPLATE/config.yml +5 -0
  6. data/.github/ISSUE_TEMPLATE/feature_request.yaml +38 -0
  7. data/.github/ISSUE_TEMPLATE.md +17 -0
  8. data/.github/PULL_REQUEST_TEMPLATE.md +14 -0
  9. data/.github/workflows/issue-auto-closer.yml +12 -0
  10. data/.github/workflows/linux-test.yaml +36 -0
  11. data/.github/workflows/macos-test.yaml +30 -0
  12. data/.github/workflows/stale-actions.yml +22 -0
  13. data/.github/workflows/windows-test.yaml +46 -0
  14. data/.gitignore +30 -0
  15. data/.gitlab-ci.yml +103 -0
  16. data/ADOPTERS.md +5 -0
  17. data/AUTHORS +2 -0
  18. data/CHANGELOG.md +2409 -0
  19. data/CONTRIBUTING.md +45 -0
  20. data/GOVERNANCE.md +55 -0
  21. data/Gemfile +9 -0
  22. data/GithubWorkflow.md +78 -0
  23. data/LICENSE +202 -0
  24. data/MAINTAINERS.md +11 -0
  25. data/README.md +97 -0
  26. data/Rakefile +79 -0
  27. data/SECURITY.md +18 -0
  28. data/bin/fluent-binlog-reader +7 -0
  29. data/bin/fluent-ca-generate +6 -0
  30. data/bin/fluent-cap-ctl +7 -0
  31. data/bin/fluent-cat +5 -0
  32. data/bin/fluent-ctl +7 -0
  33. data/bin/fluent-debug +5 -0
  34. data/bin/fluent-gem +9 -0
  35. data/bin/fluent-plugin-config-format +5 -0
  36. data/bin/fluent-plugin-generate +5 -0
  37. data/bin/fluentd +15 -0
  38. data/code-of-conduct.md +3 -0
  39. data/docs/SECURITY_AUDIT.pdf +0 -0
  40. data/example/copy_roundrobin.conf +39 -0
  41. data/example/counter.conf +18 -0
  42. data/example/filter_stdout.conf +22 -0
  43. data/example/in_forward.conf +14 -0
  44. data/example/in_forward_client.conf +37 -0
  45. data/example/in_forward_shared_key.conf +15 -0
  46. data/example/in_forward_tls.conf +14 -0
  47. data/example/in_forward_users.conf +24 -0
  48. data/example/in_forward_workers.conf +21 -0
  49. data/example/in_http.conf +16 -0
  50. data/example/in_out_forward.conf +17 -0
  51. data/example/in_sample_blocks.conf +17 -0
  52. data/example/in_sample_with_compression.conf +23 -0
  53. data/example/in_syslog.conf +15 -0
  54. data/example/in_tail.conf +14 -0
  55. data/example/in_tcp.conf +13 -0
  56. data/example/in_udp.conf +13 -0
  57. data/example/logevents.conf +25 -0
  58. data/example/multi_filters.conf +61 -0
  59. data/example/out_copy.conf +20 -0
  60. data/example/out_exec_filter.conf +42 -0
  61. data/example/out_file.conf +13 -0
  62. data/example/out_forward.conf +35 -0
  63. data/example/out_forward_buf_file.conf +23 -0
  64. data/example/out_forward_client.conf +109 -0
  65. data/example/out_forward_heartbeat_none.conf +16 -0
  66. data/example/out_forward_sd.conf +17 -0
  67. data/example/out_forward_shared_key.conf +36 -0
  68. data/example/out_forward_tls.conf +18 -0
  69. data/example/out_forward_users.conf +65 -0
  70. data/example/out_null.conf +36 -0
  71. data/example/sd.yaml +8 -0
  72. data/example/secondary_file.conf +42 -0
  73. data/example/suppress_config_dump.conf +7 -0
  74. data/example/v0_12_filter.conf +78 -0
  75. data/example/v1_literal_example.conf +36 -0
  76. data/example/worker_section.conf +36 -0
  77. data/fluent.conf +139 -0
  78. data/fluentd.gemspec +55 -0
  79. data/lib/fluent/agent.rb +168 -0
  80. data/lib/fluent/capability.rb +87 -0
  81. data/lib/fluent/clock.rb +66 -0
  82. data/lib/fluent/command/binlog_reader.rb +244 -0
  83. data/lib/fluent/command/bundler_injection.rb +45 -0
  84. data/lib/fluent/command/ca_generate.rb +184 -0
  85. data/lib/fluent/command/cap_ctl.rb +174 -0
  86. data/lib/fluent/command/cat.rb +365 -0
  87. data/lib/fluent/command/ctl.rb +177 -0
  88. data/lib/fluent/command/debug.rb +103 -0
  89. data/lib/fluent/command/fluentd.rb +374 -0
  90. data/lib/fluent/command/plugin_config_formatter.rb +308 -0
  91. data/lib/fluent/command/plugin_generator.rb +365 -0
  92. data/lib/fluent/compat/call_super_mixin.rb +76 -0
  93. data/lib/fluent/compat/detach_process_mixin.rb +33 -0
  94. data/lib/fluent/compat/exec_util.rb +129 -0
  95. data/lib/fluent/compat/file_util.rb +54 -0
  96. data/lib/fluent/compat/filter.rb +68 -0
  97. data/lib/fluent/compat/formatter.rb +111 -0
  98. data/lib/fluent/compat/formatter_utils.rb +85 -0
  99. data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
  100. data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
  101. data/lib/fluent/compat/input.rb +49 -0
  102. data/lib/fluent/compat/output.rb +721 -0
  103. data/lib/fluent/compat/output_chain.rb +60 -0
  104. data/lib/fluent/compat/parser.rb +310 -0
  105. data/lib/fluent/compat/parser_utils.rb +40 -0
  106. data/lib/fluent/compat/propagate_default.rb +62 -0
  107. data/lib/fluent/compat/record_filter_mixin.rb +34 -0
  108. data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
  109. data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
  110. data/lib/fluent/compat/socket_util.rb +165 -0
  111. data/lib/fluent/compat/string_util.rb +34 -0
  112. data/lib/fluent/compat/structured_format_mixin.rb +26 -0
  113. data/lib/fluent/compat/type_converter.rb +90 -0
  114. data/lib/fluent/config/basic_parser.rb +123 -0
  115. data/lib/fluent/config/configure_proxy.rb +424 -0
  116. data/lib/fluent/config/dsl.rb +152 -0
  117. data/lib/fluent/config/element.rb +265 -0
  118. data/lib/fluent/config/error.rb +32 -0
  119. data/lib/fluent/config/literal_parser.rb +286 -0
  120. data/lib/fluent/config/parser.rb +107 -0
  121. data/lib/fluent/config/section.rb +272 -0
  122. data/lib/fluent/config/types.rb +249 -0
  123. data/lib/fluent/config/v1_parser.rb +192 -0
  124. data/lib/fluent/config.rb +76 -0
  125. data/lib/fluent/configurable.rb +201 -0
  126. data/lib/fluent/counter/base_socket.rb +44 -0
  127. data/lib/fluent/counter/client.rb +297 -0
  128. data/lib/fluent/counter/error.rb +86 -0
  129. data/lib/fluent/counter/mutex_hash.rb +163 -0
  130. data/lib/fluent/counter/server.rb +273 -0
  131. data/lib/fluent/counter/store.rb +205 -0
  132. data/lib/fluent/counter/validator.rb +145 -0
  133. data/lib/fluent/counter.rb +23 -0
  134. data/lib/fluent/daemon.rb +15 -0
  135. data/lib/fluent/daemonizer.rb +88 -0
  136. data/lib/fluent/engine.rb +253 -0
  137. data/lib/fluent/env.rb +40 -0
  138. data/lib/fluent/error.rb +34 -0
  139. data/lib/fluent/event.rb +326 -0
  140. data/lib/fluent/event_router.rb +297 -0
  141. data/lib/fluent/ext_monitor_require.rb +28 -0
  142. data/lib/fluent/filter.rb +21 -0
  143. data/lib/fluent/fluent_log_event_router.rb +141 -0
  144. data/lib/fluent/formatter.rb +23 -0
  145. data/lib/fluent/input.rb +21 -0
  146. data/lib/fluent/label.rb +46 -0
  147. data/lib/fluent/load.rb +34 -0
  148. data/lib/fluent/log.rb +713 -0
  149. data/lib/fluent/match.rb +187 -0
  150. data/lib/fluent/mixin.rb +31 -0
  151. data/lib/fluent/msgpack_factory.rb +106 -0
  152. data/lib/fluent/oj_options.rb +62 -0
  153. data/lib/fluent/output.rb +29 -0
  154. data/lib/fluent/output_chain.rb +23 -0
  155. data/lib/fluent/parser.rb +23 -0
  156. data/lib/fluent/plugin/bare_output.rb +104 -0
  157. data/lib/fluent/plugin/base.rb +197 -0
  158. data/lib/fluent/plugin/buf_file.rb +213 -0
  159. data/lib/fluent/plugin/buf_file_single.rb +225 -0
  160. data/lib/fluent/plugin/buf_memory.rb +34 -0
  161. data/lib/fluent/plugin/buffer/chunk.rb +240 -0
  162. data/lib/fluent/plugin/buffer/file_chunk.rb +413 -0
  163. data/lib/fluent/plugin/buffer/file_single_chunk.rb +311 -0
  164. data/lib/fluent/plugin/buffer/memory_chunk.rb +91 -0
  165. data/lib/fluent/plugin/buffer.rb +918 -0
  166. data/lib/fluent/plugin/compressable.rb +96 -0
  167. data/lib/fluent/plugin/exec_util.rb +22 -0
  168. data/lib/fluent/plugin/file_util.rb +22 -0
  169. data/lib/fluent/plugin/file_wrapper.rb +187 -0
  170. data/lib/fluent/plugin/filter.rb +127 -0
  171. data/lib/fluent/plugin/filter_grep.rb +189 -0
  172. data/lib/fluent/plugin/filter_parser.rb +130 -0
  173. data/lib/fluent/plugin/filter_record_transformer.rb +324 -0
  174. data/lib/fluent/plugin/filter_stdout.rb +53 -0
  175. data/lib/fluent/plugin/formatter.rb +75 -0
  176. data/lib/fluent/plugin/formatter_csv.rb +78 -0
  177. data/lib/fluent/plugin/formatter_hash.rb +35 -0
  178. data/lib/fluent/plugin/formatter_json.rb +59 -0
  179. data/lib/fluent/plugin/formatter_ltsv.rb +44 -0
  180. data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
  181. data/lib/fluent/plugin/formatter_out_file.rb +53 -0
  182. data/lib/fluent/plugin/formatter_single_value.rb +36 -0
  183. data/lib/fluent/plugin/formatter_stdout.rb +76 -0
  184. data/lib/fluent/plugin/formatter_tsv.rb +40 -0
  185. data/lib/fluent/plugin/in_debug_agent.rb +71 -0
  186. data/lib/fluent/plugin/in_dummy.rb +18 -0
  187. data/lib/fluent/plugin/in_exec.rb +110 -0
  188. data/lib/fluent/plugin/in_forward.rb +473 -0
  189. data/lib/fluent/plugin/in_gc_stat.rb +72 -0
  190. data/lib/fluent/plugin/in_http.rb +667 -0
  191. data/lib/fluent/plugin/in_monitor_agent.rb +412 -0
  192. data/lib/fluent/plugin/in_object_space.rb +93 -0
  193. data/lib/fluent/plugin/in_sample.rb +141 -0
  194. data/lib/fluent/plugin/in_syslog.rb +276 -0
  195. data/lib/fluent/plugin/in_tail/position_file.rb +269 -0
  196. data/lib/fluent/plugin/in_tail.rb +1228 -0
  197. data/lib/fluent/plugin/in_tcp.rb +181 -0
  198. data/lib/fluent/plugin/in_udp.rb +92 -0
  199. data/lib/fluent/plugin/in_unix.rb +195 -0
  200. data/lib/fluent/plugin/input.rb +75 -0
  201. data/lib/fluent/plugin/metrics.rb +119 -0
  202. data/lib/fluent/plugin/metrics_local.rb +96 -0
  203. data/lib/fluent/plugin/multi_output.rb +195 -0
  204. data/lib/fluent/plugin/out_copy.rb +120 -0
  205. data/lib/fluent/plugin/out_exec.rb +105 -0
  206. data/lib/fluent/plugin/out_exec_filter.rb +319 -0
  207. data/lib/fluent/plugin/out_file.rb +334 -0
  208. data/lib/fluent/plugin/out_forward/ack_handler.rb +161 -0
  209. data/lib/fluent/plugin/out_forward/connection_manager.rb +113 -0
  210. data/lib/fluent/plugin/out_forward/error.rb +28 -0
  211. data/lib/fluent/plugin/out_forward/failure_detector.rb +84 -0
  212. data/lib/fluent/plugin/out_forward/handshake_protocol.rb +125 -0
  213. data/lib/fluent/plugin/out_forward/load_balancer.rb +114 -0
  214. data/lib/fluent/plugin/out_forward/socket_cache.rb +140 -0
  215. data/lib/fluent/plugin/out_forward.rb +826 -0
  216. data/lib/fluent/plugin/out_http.rb +275 -0
  217. data/lib/fluent/plugin/out_null.rb +74 -0
  218. data/lib/fluent/plugin/out_relabel.rb +32 -0
  219. data/lib/fluent/plugin/out_roundrobin.rb +84 -0
  220. data/lib/fluent/plugin/out_secondary_file.rb +131 -0
  221. data/lib/fluent/plugin/out_stdout.rb +74 -0
  222. data/lib/fluent/plugin/out_stream.rb +130 -0
  223. data/lib/fluent/plugin/output.rb +1556 -0
  224. data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
  225. data/lib/fluent/plugin/parser.rb +275 -0
  226. data/lib/fluent/plugin/parser_apache.rb +28 -0
  227. data/lib/fluent/plugin/parser_apache2.rb +88 -0
  228. data/lib/fluent/plugin/parser_apache_error.rb +26 -0
  229. data/lib/fluent/plugin/parser_csv.rb +114 -0
  230. data/lib/fluent/plugin/parser_json.rb +96 -0
  231. data/lib/fluent/plugin/parser_ltsv.rb +51 -0
  232. data/lib/fluent/plugin/parser_msgpack.rb +50 -0
  233. data/lib/fluent/plugin/parser_multiline.rb +152 -0
  234. data/lib/fluent/plugin/parser_nginx.rb +28 -0
  235. data/lib/fluent/plugin/parser_none.rb +36 -0
  236. data/lib/fluent/plugin/parser_regexp.rb +68 -0
  237. data/lib/fluent/plugin/parser_syslog.rb +496 -0
  238. data/lib/fluent/plugin/parser_tsv.rb +42 -0
  239. data/lib/fluent/plugin/sd_file.rb +156 -0
  240. data/lib/fluent/plugin/sd_srv.rb +135 -0
  241. data/lib/fluent/plugin/sd_static.rb +58 -0
  242. data/lib/fluent/plugin/service_discovery.rb +65 -0
  243. data/lib/fluent/plugin/socket_util.rb +22 -0
  244. data/lib/fluent/plugin/storage.rb +84 -0
  245. data/lib/fluent/plugin/storage_local.rb +162 -0
  246. data/lib/fluent/plugin/string_util.rb +22 -0
  247. data/lib/fluent/plugin.rb +206 -0
  248. data/lib/fluent/plugin_helper/cert_option.rb +191 -0
  249. data/lib/fluent/plugin_helper/child_process.rb +366 -0
  250. data/lib/fluent/plugin_helper/compat_parameters.rb +343 -0
  251. data/lib/fluent/plugin_helper/counter.rb +51 -0
  252. data/lib/fluent/plugin_helper/event_emitter.rb +100 -0
  253. data/lib/fluent/plugin_helper/event_loop.rb +170 -0
  254. data/lib/fluent/plugin_helper/extract.rb +104 -0
  255. data/lib/fluent/plugin_helper/formatter.rb +147 -0
  256. data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
  257. data/lib/fluent/plugin_helper/http_server/compat/server.rb +92 -0
  258. data/lib/fluent/plugin_helper/http_server/compat/ssl_context_extractor.rb +52 -0
  259. data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
  260. data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
  261. data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
  262. data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
  263. data/lib/fluent/plugin_helper/http_server/server.rb +93 -0
  264. data/lib/fluent/plugin_helper/http_server/ssl_context_builder.rb +41 -0
  265. data/lib/fluent/plugin_helper/http_server.rb +135 -0
  266. data/lib/fluent/plugin_helper/inject.rb +154 -0
  267. data/lib/fluent/plugin_helper/metrics.rb +129 -0
  268. data/lib/fluent/plugin_helper/parser.rb +147 -0
  269. data/lib/fluent/plugin_helper/record_accessor.rb +207 -0
  270. data/lib/fluent/plugin_helper/retry_state.rb +209 -0
  271. data/lib/fluent/plugin_helper/server.rb +801 -0
  272. data/lib/fluent/plugin_helper/service_discovery/manager.rb +146 -0
  273. data/lib/fluent/plugin_helper/service_discovery/round_robin_balancer.rb +43 -0
  274. data/lib/fluent/plugin_helper/service_discovery.rb +125 -0
  275. data/lib/fluent/plugin_helper/socket.rb +277 -0
  276. data/lib/fluent/plugin_helper/socket_option.rb +98 -0
  277. data/lib/fluent/plugin_helper/storage.rb +349 -0
  278. data/lib/fluent/plugin_helper/thread.rb +180 -0
  279. data/lib/fluent/plugin_helper/timer.rb +92 -0
  280. data/lib/fluent/plugin_helper.rb +75 -0
  281. data/lib/fluent/plugin_id.rb +93 -0
  282. data/lib/fluent/process.rb +22 -0
  283. data/lib/fluent/registry.rb +116 -0
  284. data/lib/fluent/root_agent.rb +372 -0
  285. data/lib/fluent/rpc.rb +94 -0
  286. data/lib/fluent/static_config_analysis.rb +194 -0
  287. data/lib/fluent/supervisor.rb +1054 -0
  288. data/lib/fluent/system_config.rb +187 -0
  289. data/lib/fluent/test/base.rb +78 -0
  290. data/lib/fluent/test/driver/base.rb +225 -0
  291. data/lib/fluent/test/driver/base_owned.rb +83 -0
  292. data/lib/fluent/test/driver/base_owner.rb +135 -0
  293. data/lib/fluent/test/driver/event_feeder.rb +98 -0
  294. data/lib/fluent/test/driver/filter.rb +57 -0
  295. data/lib/fluent/test/driver/formatter.rb +30 -0
  296. data/lib/fluent/test/driver/input.rb +31 -0
  297. data/lib/fluent/test/driver/multi_output.rb +53 -0
  298. data/lib/fluent/test/driver/output.rb +102 -0
  299. data/lib/fluent/test/driver/parser.rb +30 -0
  300. data/lib/fluent/test/driver/storage.rb +30 -0
  301. data/lib/fluent/test/driver/test_event_router.rb +45 -0
  302. data/lib/fluent/test/filter_test.rb +77 -0
  303. data/lib/fluent/test/formatter_test.rb +65 -0
  304. data/lib/fluent/test/helpers.rb +134 -0
  305. data/lib/fluent/test/input_test.rb +174 -0
  306. data/lib/fluent/test/log.rb +79 -0
  307. data/lib/fluent/test/output_test.rb +156 -0
  308. data/lib/fluent/test/parser_test.rb +70 -0
  309. data/lib/fluent/test/startup_shutdown.rb +46 -0
  310. data/lib/fluent/test.rb +58 -0
  311. data/lib/fluent/time.rb +512 -0
  312. data/lib/fluent/timezone.rb +171 -0
  313. data/lib/fluent/tls.rb +81 -0
  314. data/lib/fluent/unique_id.rb +39 -0
  315. data/lib/fluent/variable_store.rb +40 -0
  316. data/lib/fluent/version.rb +21 -0
  317. data/lib/fluent/winsvc.rb +103 -0
  318. data/templates/new_gem/Gemfile +3 -0
  319. data/templates/new_gem/README.md.erb +43 -0
  320. data/templates/new_gem/Rakefile +13 -0
  321. data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
  322. data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
  323. data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
  324. data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
  325. data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
  326. data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
  327. data/templates/new_gem/lib/fluent/plugin/storage.rb.erb +40 -0
  328. data/templates/new_gem/test/helper.rb.erb +8 -0
  329. data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
  330. data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
  331. data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
  332. data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
  333. data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
  334. data/templates/new_gem/test/plugin/test_storage.rb.erb +18 -0
  335. data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
  336. data/templates/plugin_config_formatter/param.md-table.erb +10 -0
  337. data/templates/plugin_config_formatter/param.md.erb +34 -0
  338. data/templates/plugin_config_formatter/section.md.erb +12 -0
  339. data/test/command/test_binlog_reader.rb +362 -0
  340. data/test/command/test_ca_generate.rb +70 -0
  341. data/test/command/test_cap_ctl.rb +100 -0
  342. data/test/command/test_cat.rb +128 -0
  343. data/test/command/test_ctl.rb +57 -0
  344. data/test/command/test_fluentd.rb +1106 -0
  345. data/test/command/test_plugin_config_formatter.rb +398 -0
  346. data/test/command/test_plugin_generator.rb +109 -0
  347. data/test/compat/test_calls_super.rb +166 -0
  348. data/test/compat/test_parser.rb +92 -0
  349. data/test/config/assertions.rb +42 -0
  350. data/test/config/test_config_parser.rb +551 -0
  351. data/test/config/test_configurable.rb +1784 -0
  352. data/test/config/test_configure_proxy.rb +604 -0
  353. data/test/config/test_dsl.rb +415 -0
  354. data/test/config/test_element.rb +518 -0
  355. data/test/config/test_literal_parser.rb +309 -0
  356. data/test/config/test_plugin_configuration.rb +56 -0
  357. data/test/config/test_section.rb +191 -0
  358. data/test/config/test_system_config.rb +199 -0
  359. data/test/config/test_types.rb +408 -0
  360. data/test/counter/test_client.rb +563 -0
  361. data/test/counter/test_error.rb +44 -0
  362. data/test/counter/test_mutex_hash.rb +179 -0
  363. data/test/counter/test_server.rb +589 -0
  364. data/test/counter/test_store.rb +258 -0
  365. data/test/counter/test_validator.rb +137 -0
  366. data/test/helper.rb +155 -0
  367. data/test/helpers/fuzzy_assert.rb +89 -0
  368. data/test/helpers/process_extenstion.rb +33 -0
  369. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  370. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  371. data/test/plugin/data/2010/01/20100102.log +0 -0
  372. data/test/plugin/data/log/bar +0 -0
  373. data/test/plugin/data/log/foo/bar.log +0 -0
  374. data/test/plugin/data/log/foo/bar2 +0 -0
  375. data/test/plugin/data/log/test.log +0 -0
  376. data/test/plugin/data/sd_file/config +11 -0
  377. data/test/plugin/data/sd_file/config.json +17 -0
  378. data/test/plugin/data/sd_file/config.yaml +11 -0
  379. data/test/plugin/data/sd_file/config.yml +11 -0
  380. data/test/plugin/data/sd_file/invalid_config.yml +7 -0
  381. data/test/plugin/in_tail/test_fifo.rb +121 -0
  382. data/test/plugin/in_tail/test_io_handler.rb +140 -0
  383. data/test/plugin/in_tail/test_position_file.rb +379 -0
  384. data/test/plugin/out_forward/test_ack_handler.rb +101 -0
  385. data/test/plugin/out_forward/test_connection_manager.rb +145 -0
  386. data/test/plugin/out_forward/test_handshake_protocol.rb +112 -0
  387. data/test/plugin/out_forward/test_load_balancer.rb +106 -0
  388. data/test/plugin/out_forward/test_socket_cache.rb +149 -0
  389. data/test/plugin/test_bare_output.rb +131 -0
  390. data/test/plugin/test_base.rb +115 -0
  391. data/test/plugin/test_buf_file.rb +1275 -0
  392. data/test/plugin/test_buf_file_single.rb +833 -0
  393. data/test/plugin/test_buf_memory.rb +42 -0
  394. data/test/plugin/test_buffer.rb +1383 -0
  395. data/test/plugin/test_buffer_chunk.rb +198 -0
  396. data/test/plugin/test_buffer_file_chunk.rb +871 -0
  397. data/test/plugin/test_buffer_file_single_chunk.rb +611 -0
  398. data/test/plugin/test_buffer_memory_chunk.rb +339 -0
  399. data/test/plugin/test_compressable.rb +87 -0
  400. data/test/plugin/test_file_util.rb +96 -0
  401. data/test/plugin/test_file_wrapper.rb +126 -0
  402. data/test/plugin/test_filter.rb +368 -0
  403. data/test/plugin/test_filter_grep.rb +697 -0
  404. data/test/plugin/test_filter_parser.rb +731 -0
  405. data/test/plugin/test_filter_record_transformer.rb +577 -0
  406. data/test/plugin/test_filter_stdout.rb +207 -0
  407. data/test/plugin/test_formatter_csv.rb +136 -0
  408. data/test/plugin/test_formatter_hash.rb +38 -0
  409. data/test/plugin/test_formatter_json.rb +61 -0
  410. data/test/plugin/test_formatter_ltsv.rb +70 -0
  411. data/test/plugin/test_formatter_msgpack.rb +28 -0
  412. data/test/plugin/test_formatter_out_file.rb +116 -0
  413. data/test/plugin/test_formatter_single_value.rb +44 -0
  414. data/test/plugin/test_formatter_tsv.rb +76 -0
  415. data/test/plugin/test_in_debug_agent.rb +49 -0
  416. data/test/plugin/test_in_exec.rb +261 -0
  417. data/test/plugin/test_in_forward.rb +1180 -0
  418. data/test/plugin/test_in_gc_stat.rb +62 -0
  419. data/test/plugin/test_in_http.rb +1080 -0
  420. data/test/plugin/test_in_monitor_agent.rb +923 -0
  421. data/test/plugin/test_in_object_space.rb +60 -0
  422. data/test/plugin/test_in_sample.rb +190 -0
  423. data/test/plugin/test_in_syslog.rb +505 -0
  424. data/test/plugin/test_in_tail.rb +2363 -0
  425. data/test/plugin/test_in_tcp.rb +243 -0
  426. data/test/plugin/test_in_udp.rb +268 -0
  427. data/test/plugin/test_in_unix.rb +181 -0
  428. data/test/plugin/test_input.rb +137 -0
  429. data/test/plugin/test_metadata.rb +89 -0
  430. data/test/plugin/test_metrics.rb +294 -0
  431. data/test/plugin/test_metrics_local.rb +96 -0
  432. data/test/plugin/test_multi_output.rb +204 -0
  433. data/test/plugin/test_out_copy.rb +308 -0
  434. data/test/plugin/test_out_exec.rb +312 -0
  435. data/test/plugin/test_out_exec_filter.rb +606 -0
  436. data/test/plugin/test_out_file.rb +1037 -0
  437. data/test/plugin/test_out_forward.rb +1348 -0
  438. data/test/plugin/test_out_http.rb +428 -0
  439. data/test/plugin/test_out_null.rb +105 -0
  440. data/test/plugin/test_out_relabel.rb +28 -0
  441. data/test/plugin/test_out_roundrobin.rb +146 -0
  442. data/test/plugin/test_out_secondary_file.rb +458 -0
  443. data/test/plugin/test_out_stdout.rb +205 -0
  444. data/test/plugin/test_out_stream.rb +103 -0
  445. data/test/plugin/test_output.rb +1065 -0
  446. data/test/plugin/test_output_as_buffered.rb +2024 -0
  447. data/test/plugin/test_output_as_buffered_backup.rb +363 -0
  448. data/test/plugin/test_output_as_buffered_compress.rb +165 -0
  449. data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
  450. data/test/plugin/test_output_as_buffered_retries.rb +919 -0
  451. data/test/plugin/test_output_as_buffered_secondary.rb +882 -0
  452. data/test/plugin/test_output_as_standard.rb +374 -0
  453. data/test/plugin/test_owned_by.rb +35 -0
  454. data/test/plugin/test_parser.rb +399 -0
  455. data/test/plugin/test_parser_apache.rb +42 -0
  456. data/test/plugin/test_parser_apache2.rb +47 -0
  457. data/test/plugin/test_parser_apache_error.rb +45 -0
  458. data/test/plugin/test_parser_csv.rb +200 -0
  459. data/test/plugin/test_parser_json.rb +138 -0
  460. data/test/plugin/test_parser_labeled_tsv.rb +160 -0
  461. data/test/plugin/test_parser_multiline.rb +111 -0
  462. data/test/plugin/test_parser_nginx.rb +88 -0
  463. data/test/plugin/test_parser_none.rb +52 -0
  464. data/test/plugin/test_parser_regexp.rb +289 -0
  465. data/test/plugin/test_parser_syslog.rb +650 -0
  466. data/test/plugin/test_parser_tsv.rb +122 -0
  467. data/test/plugin/test_sd_file.rb +228 -0
  468. data/test/plugin/test_sd_srv.rb +230 -0
  469. data/test/plugin/test_storage.rb +167 -0
  470. data/test/plugin/test_storage_local.rb +335 -0
  471. data/test/plugin/test_string_util.rb +26 -0
  472. data/test/plugin_helper/data/cert/cert-key.pem +27 -0
  473. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +19 -0
  474. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
  475. data/test/plugin_helper/data/cert/cert.pem +19 -0
  476. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +27 -0
  477. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +20 -0
  478. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +27 -0
  479. data/test/plugin_helper/data/cert/cert_chains/cert.pem +40 -0
  480. data/test/plugin_helper/data/cert/empty.pem +0 -0
  481. data/test/plugin_helper/data/cert/generate_cert.rb +125 -0
  482. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +30 -0
  483. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +27 -0
  484. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +20 -0
  485. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +20 -0
  486. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +30 -0
  487. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +27 -0
  488. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +21 -0
  489. data/test/plugin_helper/data/cert/with_ca/cert.pem +21 -0
  490. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +30 -0
  491. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +27 -0
  492. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +20 -0
  493. data/test/plugin_helper/data/cert/without_ca/cert.pem +20 -0
  494. data/test/plugin_helper/http_server/test_app.rb +65 -0
  495. data/test/plugin_helper/http_server/test_route.rb +32 -0
  496. data/test/plugin_helper/service_discovery/test_manager.rb +93 -0
  497. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +21 -0
  498. data/test/plugin_helper/test_cert_option.rb +25 -0
  499. data/test/plugin_helper/test_child_process.rb +840 -0
  500. data/test/plugin_helper/test_compat_parameters.rb +358 -0
  501. data/test/plugin_helper/test_event_emitter.rb +80 -0
  502. data/test/plugin_helper/test_event_loop.rb +52 -0
  503. data/test/plugin_helper/test_extract.rb +194 -0
  504. data/test/plugin_helper/test_formatter.rb +255 -0
  505. data/test/plugin_helper/test_http_server_helper.rb +372 -0
  506. data/test/plugin_helper/test_inject.rb +561 -0
  507. data/test/plugin_helper/test_metrics.rb +137 -0
  508. data/test/plugin_helper/test_parser.rb +264 -0
  509. data/test/plugin_helper/test_record_accessor.rb +238 -0
  510. data/test/plugin_helper/test_retry_state.rb +442 -0
  511. data/test/plugin_helper/test_server.rb +1823 -0
  512. data/test/plugin_helper/test_service_discovery.rb +165 -0
  513. data/test/plugin_helper/test_socket.rb +146 -0
  514. data/test/plugin_helper/test_storage.rb +542 -0
  515. data/test/plugin_helper/test_thread.rb +164 -0
  516. data/test/plugin_helper/test_timer.rb +130 -0
  517. data/test/scripts/exec_script.rb +32 -0
  518. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
  519. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
  520. data/test/scripts/fluent/plugin/formatter_known.rb +8 -0
  521. data/test/scripts/fluent/plugin/out_test.rb +81 -0
  522. data/test/scripts/fluent/plugin/out_test2.rb +80 -0
  523. data/test/scripts/fluent/plugin/parser_known.rb +4 -0
  524. data/test/test_capability.rb +74 -0
  525. data/test/test_clock.rb +164 -0
  526. data/test/test_config.rb +202 -0
  527. data/test/test_configdsl.rb +148 -0
  528. data/test/test_daemonizer.rb +91 -0
  529. data/test/test_engine.rb +203 -0
  530. data/test/test_event.rb +531 -0
  531. data/test/test_event_router.rb +331 -0
  532. data/test/test_event_time.rb +199 -0
  533. data/test/test_filter.rb +121 -0
  534. data/test/test_fluent_log_event_router.rb +99 -0
  535. data/test/test_formatter.rb +366 -0
  536. data/test/test_input.rb +31 -0
  537. data/test/test_log.rb +994 -0
  538. data/test/test_logger_initializer.rb +46 -0
  539. data/test/test_match.rb +148 -0
  540. data/test/test_mixin.rb +351 -0
  541. data/test/test_msgpack_factory.rb +18 -0
  542. data/test/test_oj_options.rb +55 -0
  543. data/test/test_output.rb +278 -0
  544. data/test/test_plugin.rb +251 -0
  545. data/test/test_plugin_classes.rb +370 -0
  546. data/test/test_plugin_helper.rb +81 -0
  547. data/test/test_plugin_id.rb +119 -0
  548. data/test/test_process.rb +14 -0
  549. data/test/test_root_agent.rb +951 -0
  550. data/test/test_static_config_analysis.rb +177 -0
  551. data/test/test_supervisor.rb +601 -0
  552. data/test/test_test_drivers.rb +136 -0
  553. data/test/test_time_formatter.rb +301 -0
  554. data/test/test_time_parser.rb +362 -0
  555. data/test/test_tls.rb +65 -0
  556. data/test/test_unique_id.rb +47 -0
  557. data/test/test_variable_store.rb +65 -0
  558. metadata +1261 -0
data/test/test_log.rb ADDED
@@ -0,0 +1,994 @@
1
+ require_relative 'helper'
2
+ require 'fluent/test/driver/input'
3
+ require 'fluent/engine'
4
+ require 'fluent/log'
5
+ require 'timecop'
6
+ require 'logger'
7
+
8
+ class LogTest < Test::Unit::TestCase
9
+ TMP_DIR = File.expand_path(File.dirname(__FILE__) + "/tmp/log/#{ENV['TEST_ENV_NUMBER']}")
10
+
11
+ def setup
12
+ FileUtils.rm_rf(TMP_DIR)
13
+ FileUtils.mkdir_p(TMP_DIR)
14
+ @log_device = Fluent::Test::DummyLogDevice.new
15
+ @timestamp = Time.parse("2016-04-21 02:58:41 +0000")
16
+ @timestamp_str = @timestamp.strftime("%Y-%m-%d %H:%M:%S %z")
17
+ Timecop.freeze(@timestamp)
18
+ end
19
+
20
+ def teardown
21
+ @log_device.reset
22
+ Timecop.return
23
+ Thread.current[:last_repeated_stacktrace] = nil
24
+ end
25
+
26
+ sub_test_case "log level" do
27
+ data(
28
+ trace: [Fluent::Log::LEVEL_TRACE, 0],
29
+ debug: [Fluent::Log::LEVEL_DEBUG, 1],
30
+ info: [Fluent::Log::LEVEL_INFO, 2],
31
+ warn: [Fluent::Log::LEVEL_WARN, 3],
32
+ error: [Fluent::Log::LEVEL_ERROR, 4],
33
+ fatal: [Fluent::Log::LEVEL_FATAL, 5],
34
+ )
35
+ def test_output(data)
36
+ log_level, start = data
37
+ logdev = @log_device
38
+ logger = ServerEngine::DaemonLogger.new(logdev)
39
+ log = Fluent::Log.new(logger)
40
+ log.level = log_level
41
+ log.trace "trace log"
42
+ log.debug "debug log"
43
+ log.info "info log"
44
+ log.warn "warn log"
45
+ log.error "error log"
46
+ log.fatal "fatal log"
47
+ expected = [
48
+ "#{@timestamp_str} [trace]: trace log\n",
49
+ "#{@timestamp_str} [debug]: debug log\n",
50
+ "#{@timestamp_str} [info]: info log\n",
51
+ "#{@timestamp_str} [warn]: warn log\n",
52
+ "#{@timestamp_str} [error]: error log\n",
53
+ "#{@timestamp_str} [fatal]: fatal log\n"
54
+ ][start..-1]
55
+ assert_equal(expected, log.out.logs)
56
+ end
57
+
58
+ data(
59
+ trace: [ServerEngine::DaemonLogger::TRACE, 0],
60
+ debug: [ServerEngine::DaemonLogger::DEBUG, 1],
61
+ info: [ServerEngine::DaemonLogger::INFO, 2],
62
+ warn: [ServerEngine::DaemonLogger::WARN, 3],
63
+ error: [ServerEngine::DaemonLogger::ERROR, 4],
64
+ fatal: [ServerEngine::DaemonLogger::FATAL, 5],
65
+ )
66
+ def test_output_with_serverengine_loglevel(data)
67
+ log_level, start = data
68
+
69
+ dl_opts = {}
70
+ dl_opts[:log_level] = log_level
71
+ logdev = @log_device
72
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
73
+ log = Fluent::Log.new(logger)
74
+ log.trace "trace log"
75
+ log.debug "debug log"
76
+ log.info "info log"
77
+ log.warn "warn log"
78
+ log.error "error log"
79
+ log.fatal "fatal log"
80
+ expected = [
81
+ "#{@timestamp_str} [trace]: trace log\n",
82
+ "#{@timestamp_str} [debug]: debug log\n",
83
+ "#{@timestamp_str} [info]: info log\n",
84
+ "#{@timestamp_str} [warn]: warn log\n",
85
+ "#{@timestamp_str} [error]: error log\n",
86
+ "#{@timestamp_str} [fatal]: fatal log\n"
87
+ ][start..-1]
88
+ assert_equal(expected, log.out.logs)
89
+ end
90
+
91
+ data(
92
+ trace: [Fluent::Log::LEVEL_TRACE, 0],
93
+ debug: [Fluent::Log::LEVEL_DEBUG, 1],
94
+ info: [Fluent::Log::LEVEL_INFO, 2],
95
+ warn: [Fluent::Log::LEVEL_WARN, 3],
96
+ error: [Fluent::Log::LEVEL_ERROR, 4],
97
+ fatal: [Fluent::Log::LEVEL_FATAL, 5],
98
+ )
99
+ def test_output_with_block(data)
100
+ log_level, start = data
101
+
102
+ logdev = @log_device
103
+ logger = ServerEngine::DaemonLogger.new(logdev)
104
+ log = Fluent::Log.new(logger)
105
+ log.level = log_level
106
+ log.trace { "trace log" }
107
+ log.debug { "debug log" }
108
+ log.info { "info log" }
109
+ log.warn { "warn log" }
110
+ log.error { "error log" }
111
+ log.fatal { "fatal log" }
112
+ expected = [
113
+ "#{@timestamp_str} [trace]: trace log\n",
114
+ "#{@timestamp_str} [debug]: debug log\n",
115
+ "#{@timestamp_str} [info]: info log\n",
116
+ "#{@timestamp_str} [warn]: warn log\n",
117
+ "#{@timestamp_str} [error]: error log\n",
118
+ "#{@timestamp_str} [fatal]: fatal log\n"
119
+ ][start..-1]
120
+ assert_equal(expected, log.out.logs)
121
+ end
122
+
123
+ data(
124
+ trace: [ServerEngine::DaemonLogger::TRACE, 0],
125
+ debug: [ServerEngine::DaemonLogger::DEBUG, 1],
126
+ info: [ServerEngine::DaemonLogger::INFO, 2],
127
+ warn: [ServerEngine::DaemonLogger::WARN, 3],
128
+ error: [ServerEngine::DaemonLogger::ERROR, 4],
129
+ fatal: [ServerEngine::DaemonLogger::FATAL, 5],
130
+ )
131
+ def test_output_with_block_with_serverengine_loglevel(data)
132
+ log_level, start = data
133
+
134
+ dl_opts = {}
135
+ dl_opts[:log_level] = log_level
136
+ logdev = @log_device
137
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
138
+ log = Fluent::Log.new(logger)
139
+ log.trace { "trace log" }
140
+ log.debug { "debug log" }
141
+ log.info { "info log" }
142
+ log.warn { "warn log" }
143
+ log.error { "error log" }
144
+ log.fatal { "fatal log" }
145
+ expected = [
146
+ "#{@timestamp_str} [trace]: trace log\n",
147
+ "#{@timestamp_str} [debug]: debug log\n",
148
+ "#{@timestamp_str} [info]: info log\n",
149
+ "#{@timestamp_str} [warn]: warn log\n",
150
+ "#{@timestamp_str} [error]: error log\n",
151
+ "#{@timestamp_str} [fatal]: fatal log\n"
152
+ ][start..-1]
153
+ assert_equal(expected, log.out.logs)
154
+ end
155
+
156
+ data(
157
+ trace: [Fluent::Log::LEVEL_TRACE, { trace: true, debug: true, info: true, warn: true, error: true, fatal: true }],
158
+ debug: [Fluent::Log::LEVEL_DEBUG, { trace: false, debug: true, info: true, warn: true, error: true, fatal: true }],
159
+ info: [Fluent::Log::LEVEL_INFO, { trace: false, debug: false, info: true, warn: true, error: true, fatal: true }],
160
+ warn: [Fluent::Log::LEVEL_WARN, { trace: false, debug: false, info: false, warn: true, error: true, fatal: true }],
161
+ error: [Fluent::Log::LEVEL_ERROR, { trace: false, debug: false, info: false, warn: false, error: true, fatal: true }],
162
+ fatal: [Fluent::Log::LEVEL_FATAL, { trace: false, debug: false, info: false, warn: false, error: false, fatal: true }],
163
+ )
164
+ def test_execute_block(data)
165
+ log_level, expected = data
166
+ logdev = @log_device
167
+ logger = ServerEngine::DaemonLogger.new(logdev)
168
+ log = Fluent::Log.new(logger)
169
+ log.level = log_level
170
+ block_called = {
171
+ trace: false,
172
+ debug: false,
173
+ info: false,
174
+ warn: false,
175
+ error: false,
176
+ fatal: false,
177
+ }
178
+ log.trace { block_called[:trace] = true }
179
+ log.debug { block_called[:debug] = true }
180
+ log.info { block_called[:info] = true }
181
+ log.warn { block_called[:warn] = true }
182
+ log.error { block_called[:error] = true }
183
+ log.fatal { block_called[:fatal] = true }
184
+ assert_equal(expected, block_called)
185
+ end
186
+
187
+ data(
188
+ trace: [ServerEngine::DaemonLogger::TRACE, { trace: true, debug: true, info: true, warn: true, error: true, fatal: true }],
189
+ debug: [ServerEngine::DaemonLogger::DEBUG, { trace: false, debug: true, info: true, warn: true, error: true, fatal: true }],
190
+ info: [ServerEngine::DaemonLogger::INFO, { trace: false, debug: false, info: true, warn: true, error: true, fatal: true }],
191
+ warn: [ServerEngine::DaemonLogger::WARN, { trace: false, debug: false, info: false, warn: true, error: true, fatal: true }],
192
+ error: [ServerEngine::DaemonLogger::ERROR, { trace: false, debug: false, info: false, warn: false, error: true, fatal: true }],
193
+ fatal: [ServerEngine::DaemonLogger::FATAL, { trace: false, debug: false, info: false, warn: false, error: false, fatal: true }],
194
+ )
195
+ def test_execute_block_with_serverengine_loglevel(data)
196
+ log_level, expected = data
197
+ dl_opts = {}
198
+ dl_opts[:log_level] = log_level
199
+ logdev = @log_device
200
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
201
+ log = Fluent::Log.new(logger)
202
+ block_called = {
203
+ trace: false,
204
+ debug: false,
205
+ info: false,
206
+ warn: false,
207
+ error: false,
208
+ fatal: false,
209
+ }
210
+ log.trace { block_called[:trace] = true }
211
+ log.debug { block_called[:debug] = true }
212
+ log.info { block_called[:info] = true }
213
+ log.warn { block_called[:warn] = true }
214
+ log.error { block_called[:error] = true }
215
+ log.fatal { block_called[:fatal] = true }
216
+ assert_equal(expected, block_called)
217
+ end
218
+
219
+ data(
220
+ trace: [Fluent::Log::LEVEL_TRACE, 0],
221
+ debug: [Fluent::Log::LEVEL_DEBUG, 3],
222
+ info: [Fluent::Log::LEVEL_INFO, 6],
223
+ warn: [Fluent::Log::LEVEL_WARN, 9],
224
+ error: [Fluent::Log::LEVEL_ERROR, 12],
225
+ fatal: [Fluent::Log::LEVEL_FATAL, 15],
226
+ )
227
+ def test_backtrace(data)
228
+ log_level, start = data
229
+ backtrace = ["line 1", "line 2", "line 3"]
230
+ logdev = @log_device
231
+ logger = ServerEngine::DaemonLogger.new(logdev)
232
+ log = Fluent::Log.new(logger)
233
+ log.level = log_level
234
+ log.trace_backtrace(backtrace)
235
+ log.debug_backtrace(backtrace)
236
+ log.info_backtrace(backtrace)
237
+ log.warn_backtrace(backtrace)
238
+ log.error_backtrace(backtrace)
239
+ log.fatal_backtrace(backtrace)
240
+ expected = [
241
+ " #{@timestamp_str} [trace]: line 1\n",
242
+ " #{@timestamp_str} [trace]: line 2\n",
243
+ " #{@timestamp_str} [trace]: line 3\n",
244
+ " #{@timestamp_str} [debug]: line 1\n",
245
+ " #{@timestamp_str} [debug]: line 2\n",
246
+ " #{@timestamp_str} [debug]: line 3\n",
247
+ " #{@timestamp_str} [info]: line 1\n",
248
+ " #{@timestamp_str} [info]: line 2\n",
249
+ " #{@timestamp_str} [info]: line 3\n",
250
+ " #{@timestamp_str} [warn]: line 1\n",
251
+ " #{@timestamp_str} [warn]: line 2\n",
252
+ " #{@timestamp_str} [warn]: line 3\n",
253
+ " #{@timestamp_str} [error]: line 1\n",
254
+ " #{@timestamp_str} [error]: line 2\n",
255
+ " #{@timestamp_str} [error]: line 3\n",
256
+ " #{@timestamp_str} [fatal]: line 1\n",
257
+ " #{@timestamp_str} [fatal]: line 2\n",
258
+ " #{@timestamp_str} [fatal]: line 3\n"
259
+ ][start..-1]
260
+ assert_equal(expected, log.out.logs)
261
+ end
262
+
263
+ data(
264
+ trace: [ServerEngine::DaemonLogger::TRACE, 0],
265
+ debug: [ServerEngine::DaemonLogger::DEBUG, 3],
266
+ info: [ServerEngine::DaemonLogger::INFO, 6],
267
+ warn: [ServerEngine::DaemonLogger::WARN, 9],
268
+ error: [ServerEngine::DaemonLogger::ERROR, 12],
269
+ fatal: [ServerEngine::DaemonLogger::FATAL, 15],
270
+ )
271
+ def test_backtrace_with_serverengine_loglevel(data)
272
+ log_level, start = data
273
+ backtrace = ["line 1", "line 2", "line 3"]
274
+ dl_opts = {}
275
+ dl_opts[:log_level] = log_level
276
+ logdev = @log_device
277
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
278
+ log = Fluent::Log.new(logger)
279
+ log.trace_backtrace(backtrace)
280
+ log.debug_backtrace(backtrace)
281
+ log.info_backtrace(backtrace)
282
+ log.warn_backtrace(backtrace)
283
+ log.error_backtrace(backtrace)
284
+ log.fatal_backtrace(backtrace)
285
+ expected = [
286
+ " #{@timestamp_str} [trace]: line 1\n",
287
+ " #{@timestamp_str} [trace]: line 2\n",
288
+ " #{@timestamp_str} [trace]: line 3\n",
289
+ " #{@timestamp_str} [debug]: line 1\n",
290
+ " #{@timestamp_str} [debug]: line 2\n",
291
+ " #{@timestamp_str} [debug]: line 3\n",
292
+ " #{@timestamp_str} [info]: line 1\n",
293
+ " #{@timestamp_str} [info]: line 2\n",
294
+ " #{@timestamp_str} [info]: line 3\n",
295
+ " #{@timestamp_str} [warn]: line 1\n",
296
+ " #{@timestamp_str} [warn]: line 2\n",
297
+ " #{@timestamp_str} [warn]: line 3\n",
298
+ " #{@timestamp_str} [error]: line 1\n",
299
+ " #{@timestamp_str} [error]: line 2\n",
300
+ " #{@timestamp_str} [error]: line 3\n",
301
+ " #{@timestamp_str} [fatal]: line 1\n",
302
+ " #{@timestamp_str} [fatal]: line 2\n",
303
+ " #{@timestamp_str} [fatal]: line 3\n"
304
+ ][start..-1]
305
+ assert_equal(expected, log.out.logs)
306
+ end
307
+ end
308
+
309
+ sub_test_case "suppress repeated backtrace" do
310
+ def test_same_log_level
311
+ backtrace = ["line 1", "line 2", "line 3"]
312
+ dl_opts = {}
313
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
314
+ logdev = @log_device
315
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
316
+ opts = {}
317
+ opts[:suppress_repeated_stacktrace] = true
318
+ log = Fluent::Log.new(logger, opts)
319
+ log.trace_backtrace(backtrace)
320
+ log.trace_backtrace(backtrace)
321
+ log.trace_backtrace(backtrace + ["line 4"])
322
+ log.trace_backtrace(backtrace)
323
+ log.trace_backtrace(backtrace)
324
+ expected = [
325
+ " #{@timestamp_str} [trace]: line 1\n",
326
+ " #{@timestamp_str} [trace]: line 2\n",
327
+ " #{@timestamp_str} [trace]: line 3\n",
328
+ " #{@timestamp_str} [trace]: suppressed same stacktrace\n",
329
+ " #{@timestamp_str} [trace]: line 1\n",
330
+ " #{@timestamp_str} [trace]: line 2\n",
331
+ " #{@timestamp_str} [trace]: line 3\n",
332
+ " #{@timestamp_str} [trace]: line 4\n",
333
+ " #{@timestamp_str} [trace]: line 1\n",
334
+ " #{@timestamp_str} [trace]: line 2\n",
335
+ " #{@timestamp_str} [trace]: line 3\n",
336
+ " #{@timestamp_str} [trace]: suppressed same stacktrace\n",
337
+ ]
338
+ assert_equal(expected, log.out.logs)
339
+ end
340
+
341
+ def test_different_log_level
342
+ backtrace = ["line 1", "line 2", "line 3"]
343
+ dl_opts = {}
344
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
345
+ logdev = @log_device
346
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
347
+ opts = {}
348
+ opts[:suppress_repeated_stacktrace] = true
349
+ log = Fluent::Log.new(logger, opts)
350
+ log.trace_backtrace(backtrace)
351
+ log.debug_backtrace(backtrace)
352
+ log.info_backtrace(backtrace)
353
+ log.warn_backtrace(backtrace)
354
+ log.error_backtrace(backtrace)
355
+ log.fatal_backtrace(backtrace)
356
+ expected = [
357
+ " #{@timestamp_str} [trace]: line 1\n",
358
+ " #{@timestamp_str} [trace]: line 2\n",
359
+ " #{@timestamp_str} [trace]: line 3\n",
360
+ " #{@timestamp_str} [debug]: suppressed same stacktrace\n",
361
+ " #{@timestamp_str} [info]: suppressed same stacktrace\n",
362
+ " #{@timestamp_str} [warn]: suppressed same stacktrace\n",
363
+ " #{@timestamp_str} [error]: suppressed same stacktrace\n",
364
+ " #{@timestamp_str} [fatal]: suppressed same stacktrace\n",
365
+ ]
366
+ assert_equal(expected, log.out.logs)
367
+ end
368
+ end
369
+
370
+ sub_test_case "ignore_repeated_log_interval" do
371
+ def test_same_message
372
+ message = "This is test"
373
+ logger = ServerEngine::DaemonLogger.new(@log_device, {log_level: ServerEngine::DaemonLogger::INFO})
374
+ log = Fluent::Log.new(logger, {ignore_repeated_log_interval: 5})
375
+
376
+ log.error message
377
+ 10.times { |i|
378
+ Timecop.freeze(@timestamp + i)
379
+ log.error message
380
+ }
381
+
382
+ expected = [
383
+ "2016-04-21 02:58:41 +0000 [error]: This is test\n",
384
+ "2016-04-21 02:58:47 +0000 [error]: This is test\n"
385
+ ]
386
+ assert_equal(expected, log.out.logs)
387
+ end
388
+
389
+ def test_different_message
390
+ message = "This is test"
391
+ logger = ServerEngine::DaemonLogger.new(@log_device, {log_level: ServerEngine::DaemonLogger::INFO})
392
+ log = Fluent::Log.new(logger, {ignore_repeated_log_interval: 10})
393
+
394
+ log.error message
395
+ 3.times { |i|
396
+ Timecop.freeze(@timestamp + i)
397
+ log.error message
398
+ log.error message
399
+ log.info "Hello! " + message
400
+ }
401
+
402
+ expected = [
403
+ "2016-04-21 02:58:41 +0000 [error]: This is test\n",
404
+ "2016-04-21 02:58:41 +0000 [info]: Hello! This is test\n",
405
+ "2016-04-21 02:58:42 +0000 [error]: This is test\n",
406
+ "2016-04-21 02:58:42 +0000 [info]: Hello! This is test\n",
407
+ "2016-04-21 02:58:43 +0000 [error]: This is test\n",
408
+ "2016-04-21 02:58:43 +0000 [info]: Hello! This is test\n",
409
+ ]
410
+ assert_equal(expected, log.out.logs)
411
+ end
412
+ end
413
+
414
+ sub_test_case "ignore_same_log_interval" do
415
+ teardown do
416
+ Thread.current[:last_same_log] = nil
417
+ end
418
+
419
+ def test_same_message
420
+ message = "This is test"
421
+ logger = ServerEngine::DaemonLogger.new(@log_device, {log_level: ServerEngine::DaemonLogger::INFO})
422
+ log = Fluent::Log.new(logger, {ignore_same_log_interval: 5})
423
+
424
+ log.error message
425
+ 10.times { |i|
426
+ Timecop.freeze(@timestamp + i + 1)
427
+ log.error message
428
+ }
429
+
430
+ expected = [
431
+ "2016-04-21 02:58:41 +0000 [error]: This is test\n",
432
+ "2016-04-21 02:58:47 +0000 [error]: This is test\n"
433
+ ]
434
+ assert_equal(expected, log.out.logs)
435
+ end
436
+
437
+ def test_different_message
438
+ message = "This is test"
439
+ logger = ServerEngine::DaemonLogger.new(@log_device, {log_level: ServerEngine::DaemonLogger::INFO})
440
+ log = Fluent::Log.new(logger, {ignore_same_log_interval: 10})
441
+
442
+ log.error message
443
+ 3.times { |i|
444
+ Timecop.freeze(@timestamp + i)
445
+ log.error message
446
+ log.error message
447
+ log.info "Hello! " + message
448
+ }
449
+
450
+ expected = [
451
+ "2016-04-21 02:58:41 +0000 [error]: This is test\n",
452
+ "2016-04-21 02:58:41 +0000 [info]: Hello! This is test\n",
453
+ ]
454
+ assert_equal(expected, log.out.logs)
455
+ end
456
+ end
457
+
458
+ def test_dup
459
+ dl_opts = {}
460
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
461
+ logdev = @log_device
462
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
463
+ log1 = Fluent::Log.new(logger)
464
+ log2 = log1.dup
465
+ log1.level = Fluent::Log::LEVEL_DEBUG
466
+ assert_equal(Fluent::Log::LEVEL_DEBUG, log1.level)
467
+ assert_equal(Fluent::Log::LEVEL_TRACE, log2.level)
468
+ end
469
+
470
+ def test_format_json
471
+ logdev = @log_device
472
+ logger = ServerEngine::DaemonLogger.new(logdev)
473
+ log = Fluent::Log.new(logger)
474
+ log.format = :json
475
+ log.level = Fluent::Log::LEVEL_TRACE
476
+ log.trace "trace log"
477
+ log.debug "debug log"
478
+ log.info "info log"
479
+ log.warn "warn log"
480
+ log.error "error log"
481
+ log.fatal "fatal log"
482
+ expected = [
483
+ "#{@timestamp_str} [trace]: trace log\n",
484
+ "#{@timestamp_str} [debug]: debug log\n",
485
+ "#{@timestamp_str} [info]: info log\n",
486
+ "#{@timestamp_str} [warn]: warn log\n",
487
+ "#{@timestamp_str} [error]: error log\n",
488
+ "#{@timestamp_str} [fatal]: fatal log\n"
489
+ ]
490
+ assert_equal(expected, log.out.logs.map { |l|
491
+ r = JSON.parse(l)
492
+ "#{r['time']} [#{r['level']}]: #{r['message']}\n"
493
+ })
494
+ end
495
+
496
+ def test_time_format
497
+ logdev = @log_device
498
+ logger = ServerEngine::DaemonLogger.new(logdev)
499
+ log = Fluent::Log.new(logger)
500
+ log.time_format = "%Y"
501
+ log.level = Fluent::Log::LEVEL_TRACE
502
+ log.trace "trace log"
503
+ log.debug "debug log"
504
+ log.info "info log"
505
+ log.warn "warn log"
506
+ log.error "error log"
507
+ log.fatal "fatal log"
508
+ timestamp_str = @timestamp.strftime("%Y")
509
+ expected = [
510
+ "#{timestamp_str} [trace]: trace log\n",
511
+ "#{timestamp_str} [debug]: debug log\n",
512
+ "#{timestamp_str} [info]: info log\n",
513
+ "#{timestamp_str} [warn]: warn log\n",
514
+ "#{timestamp_str} [error]: error log\n",
515
+ "#{timestamp_str} [fatal]: fatal log\n"
516
+ ]
517
+ assert_equal(expected, log.out.logs)
518
+ end
519
+
520
+ def test_disable_events
521
+ dl_opts = {}
522
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
523
+ logdev = @log_device
524
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
525
+ log = Fluent::Log.new(logger)
526
+ log.enable_event(true)
527
+ engine = log.instance_variable_get("@engine")
528
+ mock(engine).push_log_event(anything, anything, anything).once
529
+ log.trace "trace log"
530
+ log.disable_events(Thread.current)
531
+ log.trace "trace log"
532
+ end
533
+
534
+ def test_level_reload
535
+ dl_opts = {}
536
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
537
+ logdev = @log_device
538
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
539
+ log = Fluent::Log.new(logger)
540
+ assert_equal(ServerEngine::DaemonLogger::TRACE, logger.level)
541
+ assert_equal(Fluent::Log::LEVEL_TRACE, log.level)
542
+ # change daemon logger side level
543
+ logger.level = ServerEngine::DaemonLogger::DEBUG
544
+ assert_equal(ServerEngine::DaemonLogger::DEBUG, logger.level)
545
+ # check fluentd log side level is also changed
546
+ assert_equal(Fluent::Log::LEVEL_DEBUG, log.level)
547
+ end
548
+
549
+ DAY_SEC = 60 * 60 * 24
550
+ data(
551
+ rotate_daily_age: ['daily', 100000, DAY_SEC + 1],
552
+ rotate_weekly_age: ['weekly', 100000, DAY_SEC * 7 + 1],
553
+ rotate_monthly_age: ['monthly', 100000, DAY_SEC * 31 + 1],
554
+ rotate_size: [1, 100, 0, '0'],
555
+ )
556
+ def test_log_with_logdevio(expected)
557
+ with_timezone('utc') do
558
+ @timestamp = Time.parse("2016-04-21 00:00:00 +0000")
559
+ @timestamp_str = @timestamp.strftime("%Y-%m-%d %H:%M:%S %z")
560
+ Timecop.freeze(@timestamp)
561
+
562
+ rotate_age, rotate_size, travel_term = expected
563
+ path = "#{TMP_DIR}/log-dev-io-#{rotate_size}-#{rotate_age}"
564
+
565
+ logdev = Fluent::LogDeviceIO.new(path, shift_age: rotate_age, shift_size: rotate_size)
566
+ logger = ServerEngine::DaemonLogger.new(logdev)
567
+ log = Fluent::Log.new(logger)
568
+
569
+ msg = 'a' * 101
570
+ log.info msg
571
+ assert_match msg, File.read(path)
572
+
573
+ Timecop.freeze(@timestamp + travel_term)
574
+
575
+ msg2 = 'b' * 101
576
+ log.info msg2
577
+ c = File.read(path)
578
+
579
+ assert_match msg2, c
580
+ assert_not_equal msg, c
581
+ end
582
+ end
583
+
584
+ def test_log_rotates_specified_size_with_logdevio
585
+ with_timezone('utc') do
586
+ rotate_age = 2
587
+ rotate_size = 100
588
+ path = "#{TMP_DIR}/log-dev-io-#{rotate_size}-#{rotate_age}"
589
+ path0 = path + '.0'
590
+ path1 = path + '.1'
591
+
592
+ logdev = Fluent::LogDeviceIO.new(path, shift_age: rotate_age, shift_size: rotate_size)
593
+ logger = ServerEngine::DaemonLogger.new(logdev)
594
+ log = Fluent::Log.new(logger)
595
+
596
+ msg = 'a' * 101
597
+ log.info msg
598
+ assert_match msg, File.read(path)
599
+ assert_true File.exist?(path)
600
+ assert_true !File.exist?(path0)
601
+ assert_true !File.exist?(path1)
602
+
603
+ # create log.0
604
+ msg2 = 'b' * 101
605
+ log.info msg2
606
+ c = File.read(path)
607
+ c0 = File.read(path0)
608
+ assert_match msg2, c
609
+ assert_match msg, c0
610
+ assert_true File.exist?(path)
611
+ assert_true File.exist?(path0)
612
+ assert_true !File.exist?(path1)
613
+
614
+ # rotate
615
+ msg3 = 'c' * 101
616
+ log.info msg3
617
+ c = File.read(path)
618
+ c0 = File.read(path0)
619
+ assert_match msg3, c
620
+ assert_match msg2, c0
621
+ assert_true File.exist?(path)
622
+ assert_true File.exist?(path0)
623
+ assert_true !File.exist?(path1)
624
+ end
625
+ end
626
+ end
627
+
628
+ class PluginLoggerTest < Test::Unit::TestCase
629
+ def setup
630
+ @log_device = Fluent::Test::DummyLogDevice.new
631
+ @timestamp = Time.parse("2016-04-21 02:58:41 +0000")
632
+ @timestamp_str = @timestamp.strftime("%Y-%m-%d %H:%M:%S %z")
633
+ Timecop.freeze(@timestamp)
634
+ dl_opts = {}
635
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
636
+ logdev = @log_device
637
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
638
+ @logger = Fluent::Log.new(logger)
639
+ end
640
+
641
+ def teardown
642
+ @log_device.reset
643
+ Timecop.return
644
+ Thread.current[:last_repeated_stacktrace] = nil
645
+ end
646
+
647
+ def test_initialize
648
+ log = Fluent::PluginLogger.new(@logger)
649
+ logger = log.instance_variable_get("@logger")
650
+ assert_equal(logger, @logger)
651
+ end
652
+
653
+ def test_level
654
+ log = Fluent::PluginLogger.new(@logger)
655
+ assert_equal(log.level, @logger.level)
656
+ log.level = "fatal"
657
+ assert_equal(Fluent::Log::LEVEL_FATAL, log.level)
658
+ assert_equal(Fluent::Log::LEVEL_TRACE, @logger.level)
659
+ end
660
+
661
+ def test_enable_color
662
+ log = Fluent::PluginLogger.new(@logger)
663
+ log.enable_color(true)
664
+ assert_equal(true, log.enable_color?)
665
+ assert_equal(true, @logger.enable_color?)
666
+ log.enable_color(false)
667
+ assert_equal(false, log.enable_color?)
668
+ assert_equal(false, @logger.enable_color?)
669
+ log.enable_color
670
+ assert_equal(true, log.enable_color?)
671
+ assert_equal(true, @logger.enable_color?)
672
+ end
673
+
674
+ def test_log_type_in_default
675
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_TRACE).once
676
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_DEBUG).once
677
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_INFO).once
678
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_WARN).once
679
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_ERROR).once
680
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_FATAL).once
681
+
682
+ @logger.trace "trace log 1"
683
+ @logger.debug "debug log 2"
684
+ @logger.info "info log 3"
685
+ @logger.warn "warn log 4"
686
+ @logger.error "error log 5"
687
+ @logger.fatal "fatal log 6"
688
+ end
689
+
690
+ def test_log_types
691
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_TRACE).once
692
+ mock(@logger).caller_line(:supervisor, Time.now, 1, Fluent::Log::LEVEL_DEBUG).once
693
+ mock(@logger).caller_line(:worker0, Time.now, 1, Fluent::Log::LEVEL_INFO).once
694
+ mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_WARN).once
695
+ mock(@logger).caller_line(:supervisor, Time.now, 1, Fluent::Log::LEVEL_ERROR).once
696
+ mock(@logger).caller_line(:worker0, Time.now, 1, Fluent::Log::LEVEL_FATAL).once
697
+
698
+ @logger.trace :default, "trace log 1"
699
+ @logger.debug :supervisor, "debug log 2"
700
+ @logger.info :worker0, "info log 3"
701
+ @logger.warn :default, "warn log 4"
702
+ @logger.error :supervisor, "error log 5"
703
+ @logger.fatal :worker0, "fatal log 6"
704
+ end
705
+
706
+ sub_test_case "supervisor process type" do
707
+ setup do
708
+ dl_opts = {}
709
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
710
+ logdev = @log_device
711
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
712
+ @logger = Fluent::Log.new(logger, process_type: :supervisor)
713
+ end
714
+
715
+ test 'default type logs are shown w/o worker id' do
716
+ @logger.info "yaaay"
717
+ @logger.info :default, "booo"
718
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
719
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: booo\n") }
720
+ end
721
+
722
+ test 'supervisor type logs are shown w/o worker id' do
723
+ @logger.info :supervisor, "yaaay"
724
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
725
+ end
726
+
727
+ test 'worker0 type logs are not shown' do
728
+ @logger.info :worker0, "yaaay"
729
+ assert{ !@log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
730
+ end
731
+ end
732
+
733
+ sub_test_case "worker0 process type" do
734
+ setup do
735
+ dl_opts = {}
736
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
737
+ logdev = @log_device
738
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
739
+ @logger = Fluent::Log.new(logger, process_type: :worker0, worker_id: 10)
740
+ end
741
+
742
+ test 'default type logs are shown w/ worker id' do
743
+ @logger.info "yaaay"
744
+ @logger.info :default, "booo"
745
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: #10 yaaay\n") }
746
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: #10 booo\n") }
747
+ end
748
+
749
+ test 'supervisor type logs are not shown' do
750
+ @logger.info :supervisor, "yaaay"
751
+ assert{ !@log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
752
+ end
753
+
754
+ test 'worker0 type logs are shown w/o worker id' do
755
+ @logger.info :worker0, "yaaay"
756
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
757
+ end
758
+ end
759
+
760
+ sub_test_case "workers process type" do
761
+ setup do
762
+ dl_opts = {}
763
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
764
+ logdev = @log_device
765
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
766
+ @logger = Fluent::Log.new(logger, process_type: :workers, worker_id: 7)
767
+ end
768
+
769
+ test 'default type logs are shown w/ worker id' do
770
+ @logger.info "yaaay"
771
+ @logger.info :default, "booo"
772
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: #7 yaaay\n") }
773
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: #7 booo\n") }
774
+ end
775
+
776
+ test 'supervisor type logs are not shown' do
777
+ @logger.info :supervisor, "yaaay"
778
+ assert{ !@log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
779
+ end
780
+
781
+ test 'worker0 type logs are not shown' do
782
+ @logger.info :worker0, "yaaay"
783
+ assert{ !@log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
784
+ end
785
+ end
786
+
787
+ sub_test_case "standalone process type" do
788
+ setup do
789
+ dl_opts = {}
790
+ dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
791
+ logdev = @log_device
792
+ logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
793
+ @logger = Fluent::Log.new(logger, process_type: :standalone, worker_id: 0)
794
+ end
795
+
796
+ test 'default type logs are shown w/o worker id' do
797
+ @logger.info "yaaay"
798
+ @logger.info :default, "booo"
799
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
800
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: booo\n") }
801
+ end
802
+
803
+ test 'supervisor type logs are shown w/o worker id' do
804
+ @logger.info :supervisor, "yaaay"
805
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
806
+ end
807
+
808
+ test 'worker0 type logs are shown w/o worker id' do
809
+ @logger.info :worker0, "yaaay"
810
+ assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
811
+ end
812
+ end
813
+
814
+ sub_test_case "delegators" do
815
+ def setup
816
+ super
817
+ @log = Fluent::PluginLogger.new(@logger)
818
+ end
819
+
820
+ def test_enable_debug
821
+ mock(@logger).enable_debug
822
+ @log.enable_debug
823
+ end
824
+
825
+ def test_enable_event
826
+ mock(@logger).enable_event
827
+ @log.enable_event
828
+ end
829
+
830
+ def test_disable_events
831
+ mock(@logger).disable_events(Thread.current)
832
+ @log.disable_events(Thread.current)
833
+ end
834
+
835
+ def test_event
836
+ mock(@logger).event(Fluent::Log::LEVEL_TRACE, { key: "value" })
837
+ @log.event(Fluent::Log::LEVEL_TRACE, { key: "value" })
838
+ end
839
+
840
+ def test_caller_line
841
+ mock(@logger).caller_line(Time.now, 1, Fluent::Log::LEVEL_TRACE)
842
+ @log.caller_line(Time.now, 1, Fluent::Log::LEVEL_TRACE)
843
+ end
844
+
845
+ def test_puts
846
+ mock(@logger).puts("log")
847
+ @log.puts("log")
848
+ end
849
+
850
+ def test_write
851
+ mock(@logger).write("log")
852
+ @log.write("log")
853
+ end
854
+
855
+ def test_write_alias
856
+ assert(@log.respond_to?(:<<))
857
+ mock(@log.out).write("log")
858
+ @log << "log"
859
+ end
860
+
861
+ def test_out
862
+ assert_equal(@log.out, @logger.out)
863
+ @log.out = Object.new
864
+ assert_equal(@log.out, @logger.out)
865
+ end
866
+
867
+ def test_optional_header
868
+ assert_equal(@log.optional_header, @logger.optional_header)
869
+ @log.optional_header = "optional_header"
870
+ assert_equal(@log.optional_header, @logger.optional_header)
871
+ end
872
+
873
+ def test_optional_attrs
874
+ assert_equal(@log.optional_attrs, @logger.optional_attrs)
875
+ @log.optional_attrs = "optional_attrs"
876
+ assert_equal(@log.optional_attrs, @logger.optional_attrs)
877
+ end
878
+ end
879
+
880
+ sub_test_case "partially delegated" do
881
+ def setup
882
+ super
883
+ @log = Fluent::PluginLogger.new(@logger)
884
+ end
885
+
886
+ data(
887
+ text: [:text, "2016-04-21 02:58:41 +0000 [info]: yaaay\n"],
888
+ json: [:json, %Q({"time":"2016-04-21 02:58:41 +0000","level":"info","message":"yaaay"}\n)],
889
+ )
890
+ def test_format(data)
891
+ fmt, expected_log_line = data
892
+ with_timezone('utc') {
893
+ @log.format = fmt
894
+ @log.info "yaaay"
895
+ }
896
+ assert{ @log_device.logs.include? expected_log_line }
897
+ end
898
+
899
+ data(
900
+ text: [:text, "2016 [info]: yaaay\n"],
901
+ json: [:json, %Q({"time":"2016","level":"info","message":"yaaay"}\n)],
902
+ )
903
+ def test_time_format(data)
904
+ fmt, expected_log_line = data
905
+ @log.format = fmt
906
+ @log.time_format = "%Y"
907
+ @log.info "yaaay"
908
+ assert{ @log_device.logs.include? expected_log_line }
909
+ end
910
+ end
911
+ end
912
+
913
+ class PluginLoggerMixinTest < Test::Unit::TestCase
914
+ class DummyPlugin < Fluent::Plugin::Input
915
+ end
916
+
917
+ def create_driver(conf)
918
+ Fluent::Test::Driver::Input.new(DummyPlugin).configure(conf)
919
+ end
920
+
921
+ def setup
922
+ Fluent::Test.setup
923
+ end
924
+
925
+ def test_default_log
926
+ plugin = DummyPlugin.new
927
+ log = plugin.log
928
+ assert_equal($log, log)
929
+ end
930
+
931
+ def test_log_level
932
+ d = create_driver(%[log_level fatal])
933
+ log = d.instance.log
934
+ assert_not_equal($log.level, log.level)
935
+ assert_equal(Fluent::Log::LEVEL_FATAL, log.level)
936
+ end
937
+
938
+ def test_optional_header
939
+ d = create_driver(%[@id myplugin])
940
+ log = d.instance.log
941
+ assert_equal("[myplugin] ", log.optional_header)
942
+ assert_equal({}, log.optional_attrs)
943
+ end
944
+
945
+ def test_start
946
+ plugin = DummyPlugin.new
947
+ mock(plugin.log).should_receive(:reset).never
948
+ plugin.start
949
+ end
950
+
951
+ def test_terminate
952
+ plugin = DummyPlugin.new
953
+ mock(plugin.log).reset
954
+ plugin.terminate
955
+ end
956
+ end
957
+
958
+ class LogDeviceIOTest < Test::Unit::TestCase
959
+ test 'flush' do
960
+ io = StringIO.new
961
+ logdev = Fluent::LogDeviceIO.new(io)
962
+ assert_equal io, logdev.flush
963
+
964
+ io.instance_eval { undef :flush }
965
+ logdev = Fluent::LogDeviceIO.new(io)
966
+ assert_raise NoMethodError do
967
+ logdev.flush
968
+ end
969
+ end
970
+
971
+ test 'tty?' do
972
+ io = StringIO.new
973
+ logdev = Fluent::LogDeviceIO.new(io)
974
+ assert_equal io.tty?, logdev.tty?
975
+
976
+ io.instance_eval { undef :tty? }
977
+ logdev = Fluent::LogDeviceIO.new(io)
978
+ assert_raise NoMethodError do
979
+ logdev.tty?
980
+ end
981
+ end
982
+
983
+ test 'sync=' do
984
+ io = StringIO.new
985
+ logdev = Fluent::LogDeviceIO.new(io)
986
+ assert_true logdev.sync = true
987
+
988
+ io.instance_eval { undef :sync= }
989
+ logdev = Fluent::LogDeviceIO.new(io)
990
+ assert_raise NoMethodError do
991
+ logdev.sync = true
992
+ end
993
+ end
994
+ end