fluentd 1.17.0-x64-mingw32 → 1.18.0-x64-mingw32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +100 -0
  3. data/README.md +1 -0
  4. data/SECURITY.md +2 -2
  5. data/fluent.conf +14 -14
  6. data/lib/fluent/command/cap_ctl.rb +4 -4
  7. data/lib/fluent/command/fluentd.rb +7 -1
  8. data/lib/fluent/compat/call_super_mixin.rb +3 -3
  9. data/lib/fluent/compat/propagate_default.rb +4 -4
  10. data/lib/fluent/config/literal_parser.rb +9 -2
  11. data/lib/fluent/config/yaml_parser/parser.rb +4 -0
  12. data/lib/fluent/engine.rb +49 -33
  13. data/lib/fluent/env.rb +3 -0
  14. data/lib/fluent/event_router.rb +2 -2
  15. data/lib/fluent/log/console_adapter.rb +4 -2
  16. data/lib/fluent/plugin/filter_parser.rb +27 -51
  17. data/lib/fluent/plugin/in_exec.rb +14 -2
  18. data/lib/fluent/plugin/in_http.rb +6 -1
  19. data/lib/fluent/plugin/in_sample.rb +13 -7
  20. data/lib/fluent/plugin/in_syslog.rb +4 -0
  21. data/lib/fluent/plugin/in_tail.rb +65 -23
  22. data/lib/fluent/plugin/in_tcp.rb +4 -0
  23. data/lib/fluent/plugin/in_udp.rb +10 -1
  24. data/lib/fluent/plugin/input.rb +4 -0
  25. data/lib/fluent/plugin/out_buffer.rb +40 -0
  26. data/lib/fluent/plugin/out_copy.rb +1 -1
  27. data/lib/fluent/plugin/out_file.rb +8 -0
  28. data/lib/fluent/plugin/out_http.rb +12 -0
  29. data/lib/fluent/plugin/output.rb +2 -0
  30. data/lib/fluent/plugin/parser_json.rb +4 -12
  31. data/lib/fluent/plugin_helper/cert_option.rb +8 -0
  32. data/lib/fluent/plugin_helper/event_emitter.rb +12 -0
  33. data/lib/fluent/plugin_helper/http_server/server.rb +24 -8
  34. data/lib/fluent/plugin_helper/server.rb +9 -0
  35. data/lib/fluent/root_agent.rb +114 -19
  36. data/lib/fluent/source_only_buffer_agent.rb +102 -0
  37. data/lib/fluent/supervisor.rb +207 -34
  38. data/lib/fluent/system_config.rb +15 -3
  39. data/lib/fluent/version.rb +1 -1
  40. data/templates/new_gem/fluent-plugin.gemspec.erb +6 -5
  41. metadata +24 -483
  42. data/.github/DISCUSSION_TEMPLATE/q-a-japanese.yml +0 -50
  43. data/.github/DISCUSSION_TEMPLATE/q-a.yml +0 -47
  44. data/.github/ISSUE_TEMPLATE/bug_report.yml +0 -71
  45. data/.github/ISSUE_TEMPLATE/config.yml +0 -5
  46. data/.github/ISSUE_TEMPLATE/feature_request.yml +0 -39
  47. data/.github/ISSUE_TEMPLATE.md +0 -17
  48. data/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  49. data/.github/workflows/stale-actions.yml +0 -24
  50. data/.github/workflows/test-ruby-head.yml +0 -31
  51. data/.github/workflows/test.yml +0 -32
  52. data/.gitignore +0 -30
  53. data/Gemfile +0 -9
  54. data/fluentd.gemspec +0 -62
  55. data/test/command/test_binlog_reader.rb +0 -362
  56. data/test/command/test_ca_generate.rb +0 -70
  57. data/test/command/test_cap_ctl.rb +0 -100
  58. data/test/command/test_cat.rb +0 -128
  59. data/test/command/test_ctl.rb +0 -56
  60. data/test/command/test_fluentd.rb +0 -1291
  61. data/test/command/test_plugin_config_formatter.rb +0 -397
  62. data/test/command/test_plugin_generator.rb +0 -109
  63. data/test/compat/test_calls_super.rb +0 -166
  64. data/test/compat/test_parser.rb +0 -92
  65. data/test/config/assertions.rb +0 -42
  66. data/test/config/test_config_parser.rb +0 -551
  67. data/test/config/test_configurable.rb +0 -1784
  68. data/test/config/test_configure_proxy.rb +0 -604
  69. data/test/config/test_dsl.rb +0 -415
  70. data/test/config/test_element.rb +0 -518
  71. data/test/config/test_literal_parser.rb +0 -309
  72. data/test/config/test_plugin_configuration.rb +0 -56
  73. data/test/config/test_section.rb +0 -191
  74. data/test/config/test_system_config.rb +0 -195
  75. data/test/config/test_types.rb +0 -408
  76. data/test/counter/test_client.rb +0 -563
  77. data/test/counter/test_error.rb +0 -44
  78. data/test/counter/test_mutex_hash.rb +0 -179
  79. data/test/counter/test_server.rb +0 -589
  80. data/test/counter/test_store.rb +0 -258
  81. data/test/counter/test_validator.rb +0 -137
  82. data/test/helper.rb +0 -155
  83. data/test/helpers/fuzzy_assert.rb +0 -89
  84. data/test/helpers/process_extenstion.rb +0 -33
  85. data/test/log/test_console_adapter.rb +0 -117
  86. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  87. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  88. data/test/plugin/data/2010/01/20100102.log +0 -0
  89. data/test/plugin/data/log/bar +0 -0
  90. data/test/plugin/data/log/foo/bar.log +0 -0
  91. data/test/plugin/data/log/foo/bar2 +0 -0
  92. data/test/plugin/data/log/test.log +0 -0
  93. data/test/plugin/data/log_numeric/01.log +0 -0
  94. data/test/plugin/data/log_numeric/02.log +0 -0
  95. data/test/plugin/data/log_numeric/12.log +0 -0
  96. data/test/plugin/data/log_numeric/14.log +0 -0
  97. data/test/plugin/data/sd_file/config +0 -11
  98. data/test/plugin/data/sd_file/config.json +0 -17
  99. data/test/plugin/data/sd_file/config.yaml +0 -11
  100. data/test/plugin/data/sd_file/config.yml +0 -11
  101. data/test/plugin/data/sd_file/invalid_config.yml +0 -7
  102. data/test/plugin/in_tail/test_fifo.rb +0 -121
  103. data/test/plugin/in_tail/test_io_handler.rb +0 -150
  104. data/test/plugin/in_tail/test_position_file.rb +0 -346
  105. data/test/plugin/out_forward/test_ack_handler.rb +0 -140
  106. data/test/plugin/out_forward/test_connection_manager.rb +0 -145
  107. data/test/plugin/out_forward/test_handshake_protocol.rb +0 -112
  108. data/test/plugin/out_forward/test_load_balancer.rb +0 -106
  109. data/test/plugin/out_forward/test_socket_cache.rb +0 -174
  110. data/test/plugin/test_bare_output.rb +0 -131
  111. data/test/plugin/test_base.rb +0 -247
  112. data/test/plugin/test_buf_file.rb +0 -1314
  113. data/test/plugin/test_buf_file_single.rb +0 -898
  114. data/test/plugin/test_buf_memory.rb +0 -42
  115. data/test/plugin/test_buffer.rb +0 -1493
  116. data/test/plugin/test_buffer_chunk.rb +0 -209
  117. data/test/plugin/test_buffer_file_chunk.rb +0 -871
  118. data/test/plugin/test_buffer_file_single_chunk.rb +0 -611
  119. data/test/plugin/test_buffer_memory_chunk.rb +0 -339
  120. data/test/plugin/test_compressable.rb +0 -87
  121. data/test/plugin/test_file_util.rb +0 -96
  122. data/test/plugin/test_filter.rb +0 -368
  123. data/test/plugin/test_filter_grep.rb +0 -697
  124. data/test/plugin/test_filter_parser.rb +0 -731
  125. data/test/plugin/test_filter_record_transformer.rb +0 -577
  126. data/test/plugin/test_filter_stdout.rb +0 -207
  127. data/test/plugin/test_formatter_csv.rb +0 -136
  128. data/test/plugin/test_formatter_hash.rb +0 -38
  129. data/test/plugin/test_formatter_json.rb +0 -61
  130. data/test/plugin/test_formatter_ltsv.rb +0 -70
  131. data/test/plugin/test_formatter_msgpack.rb +0 -28
  132. data/test/plugin/test_formatter_out_file.rb +0 -116
  133. data/test/plugin/test_formatter_single_value.rb +0 -44
  134. data/test/plugin/test_formatter_tsv.rb +0 -76
  135. data/test/plugin/test_in_debug_agent.rb +0 -49
  136. data/test/plugin/test_in_exec.rb +0 -261
  137. data/test/plugin/test_in_forward.rb +0 -1178
  138. data/test/plugin/test_in_gc_stat.rb +0 -62
  139. data/test/plugin/test_in_http.rb +0 -1124
  140. data/test/plugin/test_in_monitor_agent.rb +0 -922
  141. data/test/plugin/test_in_object_space.rb +0 -66
  142. data/test/plugin/test_in_sample.rb +0 -190
  143. data/test/plugin/test_in_syslog.rb +0 -505
  144. data/test/plugin/test_in_tail.rb +0 -3429
  145. data/test/plugin/test_in_tcp.rb +0 -328
  146. data/test/plugin/test_in_udp.rb +0 -296
  147. data/test/plugin/test_in_unix.rb +0 -181
  148. data/test/plugin/test_input.rb +0 -137
  149. data/test/plugin/test_metadata.rb +0 -89
  150. data/test/plugin/test_metrics.rb +0 -294
  151. data/test/plugin/test_metrics_local.rb +0 -96
  152. data/test/plugin/test_multi_output.rb +0 -204
  153. data/test/plugin/test_out_copy.rb +0 -308
  154. data/test/plugin/test_out_exec.rb +0 -312
  155. data/test/plugin/test_out_exec_filter.rb +0 -606
  156. data/test/plugin/test_out_file.rb +0 -1038
  157. data/test/plugin/test_out_forward.rb +0 -1349
  158. data/test/plugin/test_out_http.rb +0 -557
  159. data/test/plugin/test_out_null.rb +0 -105
  160. data/test/plugin/test_out_relabel.rb +0 -28
  161. data/test/plugin/test_out_roundrobin.rb +0 -146
  162. data/test/plugin/test_out_secondary_file.rb +0 -458
  163. data/test/plugin/test_out_stdout.rb +0 -205
  164. data/test/plugin/test_out_stream.rb +0 -103
  165. data/test/plugin/test_output.rb +0 -1334
  166. data/test/plugin/test_output_as_buffered.rb +0 -2024
  167. data/test/plugin/test_output_as_buffered_backup.rb +0 -363
  168. data/test/plugin/test_output_as_buffered_compress.rb +0 -179
  169. data/test/plugin/test_output_as_buffered_overflow.rb +0 -250
  170. data/test/plugin/test_output_as_buffered_retries.rb +0 -966
  171. data/test/plugin/test_output_as_buffered_secondary.rb +0 -882
  172. data/test/plugin/test_output_as_standard.rb +0 -374
  173. data/test/plugin/test_owned_by.rb +0 -34
  174. data/test/plugin/test_parser.rb +0 -399
  175. data/test/plugin/test_parser_apache.rb +0 -42
  176. data/test/plugin/test_parser_apache2.rb +0 -47
  177. data/test/plugin/test_parser_apache_error.rb +0 -45
  178. data/test/plugin/test_parser_csv.rb +0 -200
  179. data/test/plugin/test_parser_json.rb +0 -244
  180. data/test/plugin/test_parser_labeled_tsv.rb +0 -160
  181. data/test/plugin/test_parser_msgpack.rb +0 -127
  182. data/test/plugin/test_parser_multiline.rb +0 -111
  183. data/test/plugin/test_parser_nginx.rb +0 -88
  184. data/test/plugin/test_parser_none.rb +0 -52
  185. data/test/plugin/test_parser_regexp.rb +0 -284
  186. data/test/plugin/test_parser_syslog.rb +0 -650
  187. data/test/plugin/test_parser_tsv.rb +0 -122
  188. data/test/plugin/test_sd_file.rb +0 -228
  189. data/test/plugin/test_sd_srv.rb +0 -230
  190. data/test/plugin/test_storage.rb +0 -166
  191. data/test/plugin/test_storage_local.rb +0 -335
  192. data/test/plugin/test_string_util.rb +0 -26
  193. data/test/plugin_helper/data/cert/cert-key.pem +0 -27
  194. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +0 -19
  195. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +0 -19
  196. data/test/plugin_helper/data/cert/cert.pem +0 -19
  197. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +0 -27
  198. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +0 -20
  199. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +0 -27
  200. data/test/plugin_helper/data/cert/cert_chains/cert.pem +0 -40
  201. data/test/plugin_helper/data/cert/empty.pem +0 -0
  202. data/test/plugin_helper/data/cert/generate_cert.rb +0 -125
  203. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +0 -30
  204. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +0 -27
  205. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +0 -20
  206. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +0 -20
  207. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +0 -30
  208. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +0 -27
  209. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +0 -21
  210. data/test/plugin_helper/data/cert/with_ca/cert.pem +0 -21
  211. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +0 -30
  212. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +0 -27
  213. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +0 -20
  214. data/test/plugin_helper/data/cert/without_ca/cert.pem +0 -20
  215. data/test/plugin_helper/http_server/test_app.rb +0 -65
  216. data/test/plugin_helper/http_server/test_route.rb +0 -32
  217. data/test/plugin_helper/service_discovery/test_manager.rb +0 -93
  218. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +0 -21
  219. data/test/plugin_helper/test_cert_option.rb +0 -25
  220. data/test/plugin_helper/test_child_process.rb +0 -862
  221. data/test/plugin_helper/test_compat_parameters.rb +0 -358
  222. data/test/plugin_helper/test_event_emitter.rb +0 -80
  223. data/test/plugin_helper/test_event_loop.rb +0 -52
  224. data/test/plugin_helper/test_extract.rb +0 -194
  225. data/test/plugin_helper/test_formatter.rb +0 -255
  226. data/test/plugin_helper/test_http_server_helper.rb +0 -372
  227. data/test/plugin_helper/test_inject.rb +0 -561
  228. data/test/plugin_helper/test_metrics.rb +0 -137
  229. data/test/plugin_helper/test_parser.rb +0 -264
  230. data/test/plugin_helper/test_record_accessor.rb +0 -238
  231. data/test/plugin_helper/test_retry_state.rb +0 -1006
  232. data/test/plugin_helper/test_server.rb +0 -1895
  233. data/test/plugin_helper/test_service_discovery.rb +0 -165
  234. data/test/plugin_helper/test_socket.rb +0 -146
  235. data/test/plugin_helper/test_storage.rb +0 -542
  236. data/test/plugin_helper/test_thread.rb +0 -164
  237. data/test/plugin_helper/test_timer.rb +0 -130
  238. data/test/scripts/exec_script.rb +0 -32
  239. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +0 -7
  240. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +0 -7
  241. data/test/scripts/fluent/plugin/formatter_known.rb +0 -8
  242. data/test/scripts/fluent/plugin/out_test.rb +0 -81
  243. data/test/scripts/fluent/plugin/out_test2.rb +0 -80
  244. data/test/scripts/fluent/plugin/parser_known.rb +0 -4
  245. data/test/test_capability.rb +0 -74
  246. data/test/test_clock.rb +0 -164
  247. data/test/test_config.rb +0 -369
  248. data/test/test_configdsl.rb +0 -148
  249. data/test/test_daemonizer.rb +0 -91
  250. data/test/test_engine.rb +0 -203
  251. data/test/test_event.rb +0 -531
  252. data/test/test_event_router.rb +0 -348
  253. data/test/test_event_time.rb +0 -199
  254. data/test/test_file_wrapper.rb +0 -53
  255. data/test/test_filter.rb +0 -121
  256. data/test/test_fluent_log_event_router.rb +0 -99
  257. data/test/test_formatter.rb +0 -369
  258. data/test/test_input.rb +0 -31
  259. data/test/test_log.rb +0 -1076
  260. data/test/test_match.rb +0 -148
  261. data/test/test_mixin.rb +0 -351
  262. data/test/test_msgpack_factory.rb +0 -50
  263. data/test/test_oj_options.rb +0 -55
  264. data/test/test_output.rb +0 -278
  265. data/test/test_plugin.rb +0 -251
  266. data/test/test_plugin_classes.rb +0 -370
  267. data/test/test_plugin_helper.rb +0 -81
  268. data/test/test_plugin_id.rb +0 -119
  269. data/test/test_process.rb +0 -14
  270. data/test/test_root_agent.rb +0 -951
  271. data/test/test_static_config_analysis.rb +0 -177
  272. data/test/test_supervisor.rb +0 -821
  273. data/test/test_test_drivers.rb +0 -136
  274. data/test/test_time_formatter.rb +0 -301
  275. data/test/test_time_parser.rb +0 -362
  276. data/test/test_tls.rb +0 -65
  277. data/test/test_unique_id.rb +0 -47
  278. data/test/test_variable_store.rb +0 -65
data/test/test_log.rb DELETED
@@ -1,1076 +0,0 @@
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
- require 'securerandom'
8
- require 'pathname'
9
-
10
- class LogTest < Test::Unit::TestCase
11
- def tmp_dir
12
- File.join(File.dirname(__FILE__), "tmp", "log", "#{ENV['TEST_ENV_NUMBER']}", SecureRandom.hex(10))
13
- end
14
-
15
- def setup
16
- @tmp_dir = tmp_dir
17
- FileUtils.mkdir_p(@tmp_dir)
18
- @log_device = Fluent::Test::DummyLogDevice.new
19
- @timestamp = Time.parse("2016-04-21 02:58:41 +0000")
20
- @timestamp_str = @timestamp.strftime("%Y-%m-%d %H:%M:%S %z")
21
- Timecop.freeze(@timestamp)
22
- end
23
-
24
- def teardown
25
- @log_device.reset
26
- Timecop.return
27
- Thread.current[:last_repeated_stacktrace] = nil
28
- begin
29
- FileUtils.rm_rf(@tmp_dir)
30
- rescue Errno::EACCES
31
- # It may occur on Windows because of delete pending state due to delayed GC.
32
- # Ruby 3.2 or later doesn't ignore Errno::EACCES:
33
- # https://github.com/ruby/ruby/commit/983115cf3c8f75b1afbe3274f02c1529e1ce3a81
34
- end
35
- end
36
-
37
- def test_per_process_path
38
- path = Fluent::Log.per_process_path("C:/tmp/test.log", :supervisor, 0)
39
- assert_equal(path, "C:/tmp/test-supervisor-0.log")
40
-
41
- path = Fluent::Log.per_process_path("C:/tmp/test.log", :worker, 1)
42
- assert_equal(path, "C:/tmp/test-1.log")
43
- end
44
-
45
- sub_test_case "log level" do
46
- data(
47
- trace: [Fluent::Log::LEVEL_TRACE, 0],
48
- debug: [Fluent::Log::LEVEL_DEBUG, 1],
49
- info: [Fluent::Log::LEVEL_INFO, 2],
50
- warn: [Fluent::Log::LEVEL_WARN, 3],
51
- error: [Fluent::Log::LEVEL_ERROR, 4],
52
- fatal: [Fluent::Log::LEVEL_FATAL, 5],
53
- )
54
- def test_output(data)
55
- log_level, start = data
56
- logdev = @log_device
57
- logger = ServerEngine::DaemonLogger.new(logdev)
58
- log = Fluent::Log.new(logger)
59
- log.level = log_level
60
- log.trace "trace log"
61
- log.debug "debug log"
62
- log.info "info log"
63
- log.warn "warn log"
64
- log.error "error log"
65
- log.fatal "fatal log"
66
- expected = [
67
- "#{@timestamp_str} [trace]: trace log\n",
68
- "#{@timestamp_str} [debug]: debug log\n",
69
- "#{@timestamp_str} [info]: info log\n",
70
- "#{@timestamp_str} [warn]: warn log\n",
71
- "#{@timestamp_str} [error]: error log\n",
72
- "#{@timestamp_str} [fatal]: fatal log\n"
73
- ][start..-1]
74
- assert_equal(expected, log.out.logs)
75
- end
76
-
77
- data(
78
- trace: [ServerEngine::DaemonLogger::TRACE, 0],
79
- debug: [ServerEngine::DaemonLogger::DEBUG, 1],
80
- info: [ServerEngine::DaemonLogger::INFO, 2],
81
- warn: [ServerEngine::DaemonLogger::WARN, 3],
82
- error: [ServerEngine::DaemonLogger::ERROR, 4],
83
- fatal: [ServerEngine::DaemonLogger::FATAL, 5],
84
- )
85
- def test_output_with_serverengine_loglevel(data)
86
- log_level, start = data
87
-
88
- dl_opts = {}
89
- dl_opts[:log_level] = log_level
90
- logdev = @log_device
91
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
92
- log = Fluent::Log.new(logger)
93
- log.trace "trace log"
94
- log.debug "debug log"
95
- log.info "info log"
96
- log.warn "warn log"
97
- log.error "error log"
98
- log.fatal "fatal log"
99
- expected = [
100
- "#{@timestamp_str} [trace]: trace log\n",
101
- "#{@timestamp_str} [debug]: debug log\n",
102
- "#{@timestamp_str} [info]: info log\n",
103
- "#{@timestamp_str} [warn]: warn log\n",
104
- "#{@timestamp_str} [error]: error log\n",
105
- "#{@timestamp_str} [fatal]: fatal log\n"
106
- ][start..-1]
107
- assert_equal(expected, log.out.logs)
108
- end
109
-
110
- data(
111
- trace: [Fluent::Log::LEVEL_TRACE, 0],
112
- debug: [Fluent::Log::LEVEL_DEBUG, 1],
113
- info: [Fluent::Log::LEVEL_INFO, 2],
114
- warn: [Fluent::Log::LEVEL_WARN, 3],
115
- error: [Fluent::Log::LEVEL_ERROR, 4],
116
- fatal: [Fluent::Log::LEVEL_FATAL, 5],
117
- )
118
- def test_output_with_block(data)
119
- log_level, start = data
120
-
121
- logdev = @log_device
122
- logger = ServerEngine::DaemonLogger.new(logdev)
123
- log = Fluent::Log.new(logger)
124
- log.level = log_level
125
- log.trace { "trace log" }
126
- log.debug { "debug log" }
127
- log.info { "info log" }
128
- log.warn { "warn log" }
129
- log.error { "error log" }
130
- log.fatal { "fatal log" }
131
- expected = [
132
- "#{@timestamp_str} [trace]: trace log\n",
133
- "#{@timestamp_str} [debug]: debug log\n",
134
- "#{@timestamp_str} [info]: info log\n",
135
- "#{@timestamp_str} [warn]: warn log\n",
136
- "#{@timestamp_str} [error]: error log\n",
137
- "#{@timestamp_str} [fatal]: fatal log\n"
138
- ][start..-1]
139
- assert_equal(expected, log.out.logs)
140
- end
141
-
142
- data(
143
- trace: [ServerEngine::DaemonLogger::TRACE, 0],
144
- debug: [ServerEngine::DaemonLogger::DEBUG, 1],
145
- info: [ServerEngine::DaemonLogger::INFO, 2],
146
- warn: [ServerEngine::DaemonLogger::WARN, 3],
147
- error: [ServerEngine::DaemonLogger::ERROR, 4],
148
- fatal: [ServerEngine::DaemonLogger::FATAL, 5],
149
- )
150
- def test_output_with_block_with_serverengine_loglevel(data)
151
- log_level, start = data
152
-
153
- dl_opts = {}
154
- dl_opts[:log_level] = log_level
155
- logdev = @log_device
156
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
157
- log = Fluent::Log.new(logger)
158
- log.trace { "trace log" }
159
- log.debug { "debug log" }
160
- log.info { "info log" }
161
- log.warn { "warn log" }
162
- log.error { "error log" }
163
- log.fatal { "fatal log" }
164
- expected = [
165
- "#{@timestamp_str} [trace]: trace log\n",
166
- "#{@timestamp_str} [debug]: debug log\n",
167
- "#{@timestamp_str} [info]: info log\n",
168
- "#{@timestamp_str} [warn]: warn log\n",
169
- "#{@timestamp_str} [error]: error log\n",
170
- "#{@timestamp_str} [fatal]: fatal log\n"
171
- ][start..-1]
172
- assert_equal(expected, log.out.logs)
173
- end
174
-
175
- data(
176
- trace: [Fluent::Log::LEVEL_TRACE, { trace: true, debug: true, info: true, warn: true, error: true, fatal: true }],
177
- debug: [Fluent::Log::LEVEL_DEBUG, { trace: false, debug: true, info: true, warn: true, error: true, fatal: true }],
178
- info: [Fluent::Log::LEVEL_INFO, { trace: false, debug: false, info: true, warn: true, error: true, fatal: true }],
179
- warn: [Fluent::Log::LEVEL_WARN, { trace: false, debug: false, info: false, warn: true, error: true, fatal: true }],
180
- error: [Fluent::Log::LEVEL_ERROR, { trace: false, debug: false, info: false, warn: false, error: true, fatal: true }],
181
- fatal: [Fluent::Log::LEVEL_FATAL, { trace: false, debug: false, info: false, warn: false, error: false, fatal: true }],
182
- )
183
- def test_execute_block(data)
184
- log_level, expected = data
185
- logdev = @log_device
186
- logger = ServerEngine::DaemonLogger.new(logdev)
187
- log = Fluent::Log.new(logger)
188
- log.level = log_level
189
- block_called = {
190
- trace: false,
191
- debug: false,
192
- info: false,
193
- warn: false,
194
- error: false,
195
- fatal: false,
196
- }
197
- log.trace { block_called[:trace] = true }
198
- log.debug { block_called[:debug] = true }
199
- log.info { block_called[:info] = true }
200
- log.warn { block_called[:warn] = true }
201
- log.error { block_called[:error] = true }
202
- log.fatal { block_called[:fatal] = true }
203
- assert_equal(expected, block_called)
204
- end
205
-
206
- data(
207
- trace: [ServerEngine::DaemonLogger::TRACE, { trace: true, debug: true, info: true, warn: true, error: true, fatal: true }],
208
- debug: [ServerEngine::DaemonLogger::DEBUG, { trace: false, debug: true, info: true, warn: true, error: true, fatal: true }],
209
- info: [ServerEngine::DaemonLogger::INFO, { trace: false, debug: false, info: true, warn: true, error: true, fatal: true }],
210
- warn: [ServerEngine::DaemonLogger::WARN, { trace: false, debug: false, info: false, warn: true, error: true, fatal: true }],
211
- error: [ServerEngine::DaemonLogger::ERROR, { trace: false, debug: false, info: false, warn: false, error: true, fatal: true }],
212
- fatal: [ServerEngine::DaemonLogger::FATAL, { trace: false, debug: false, info: false, warn: false, error: false, fatal: true }],
213
- )
214
- def test_execute_block_with_serverengine_loglevel(data)
215
- log_level, expected = data
216
- dl_opts = {}
217
- dl_opts[:log_level] = log_level
218
- logdev = @log_device
219
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
220
- log = Fluent::Log.new(logger)
221
- block_called = {
222
- trace: false,
223
- debug: false,
224
- info: false,
225
- warn: false,
226
- error: false,
227
- fatal: false,
228
- }
229
- log.trace { block_called[:trace] = true }
230
- log.debug { block_called[:debug] = true }
231
- log.info { block_called[:info] = true }
232
- log.warn { block_called[:warn] = true }
233
- log.error { block_called[:error] = true }
234
- log.fatal { block_called[:fatal] = true }
235
- assert_equal(expected, block_called)
236
- end
237
-
238
- data(
239
- trace: [Fluent::Log::LEVEL_TRACE, 0],
240
- debug: [Fluent::Log::LEVEL_DEBUG, 3],
241
- info: [Fluent::Log::LEVEL_INFO, 6],
242
- warn: [Fluent::Log::LEVEL_WARN, 9],
243
- error: [Fluent::Log::LEVEL_ERROR, 12],
244
- fatal: [Fluent::Log::LEVEL_FATAL, 15],
245
- )
246
- def test_backtrace(data)
247
- log_level, start = data
248
- backtrace = ["line 1", "line 2", "line 3"]
249
- logdev = @log_device
250
- logger = ServerEngine::DaemonLogger.new(logdev)
251
- log = Fluent::Log.new(logger)
252
- log.level = log_level
253
- log.trace_backtrace(backtrace)
254
- log.debug_backtrace(backtrace)
255
- log.info_backtrace(backtrace)
256
- log.warn_backtrace(backtrace)
257
- log.error_backtrace(backtrace)
258
- log.fatal_backtrace(backtrace)
259
- expected = [
260
- " #{@timestamp_str} [trace]: line 1\n",
261
- " #{@timestamp_str} [trace]: line 2\n",
262
- " #{@timestamp_str} [trace]: line 3\n",
263
- " #{@timestamp_str} [debug]: line 1\n",
264
- " #{@timestamp_str} [debug]: line 2\n",
265
- " #{@timestamp_str} [debug]: line 3\n",
266
- " #{@timestamp_str} [info]: line 1\n",
267
- " #{@timestamp_str} [info]: line 2\n",
268
- " #{@timestamp_str} [info]: line 3\n",
269
- " #{@timestamp_str} [warn]: line 1\n",
270
- " #{@timestamp_str} [warn]: line 2\n",
271
- " #{@timestamp_str} [warn]: line 3\n",
272
- " #{@timestamp_str} [error]: line 1\n",
273
- " #{@timestamp_str} [error]: line 2\n",
274
- " #{@timestamp_str} [error]: line 3\n",
275
- " #{@timestamp_str} [fatal]: line 1\n",
276
- " #{@timestamp_str} [fatal]: line 2\n",
277
- " #{@timestamp_str} [fatal]: line 3\n"
278
- ][start..-1]
279
- assert_equal(expected, log.out.logs)
280
- end
281
-
282
- data(
283
- trace: [ServerEngine::DaemonLogger::TRACE, 0],
284
- debug: [ServerEngine::DaemonLogger::DEBUG, 3],
285
- info: [ServerEngine::DaemonLogger::INFO, 6],
286
- warn: [ServerEngine::DaemonLogger::WARN, 9],
287
- error: [ServerEngine::DaemonLogger::ERROR, 12],
288
- fatal: [ServerEngine::DaemonLogger::FATAL, 15],
289
- )
290
- def test_backtrace_with_serverengine_loglevel(data)
291
- log_level, start = data
292
- backtrace = ["line 1", "line 2", "line 3"]
293
- dl_opts = {}
294
- dl_opts[:log_level] = log_level
295
- logdev = @log_device
296
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
297
- log = Fluent::Log.new(logger)
298
- log.trace_backtrace(backtrace)
299
- log.debug_backtrace(backtrace)
300
- log.info_backtrace(backtrace)
301
- log.warn_backtrace(backtrace)
302
- log.error_backtrace(backtrace)
303
- log.fatal_backtrace(backtrace)
304
- expected = [
305
- " #{@timestamp_str} [trace]: line 1\n",
306
- " #{@timestamp_str} [trace]: line 2\n",
307
- " #{@timestamp_str} [trace]: line 3\n",
308
- " #{@timestamp_str} [debug]: line 1\n",
309
- " #{@timestamp_str} [debug]: line 2\n",
310
- " #{@timestamp_str} [debug]: line 3\n",
311
- " #{@timestamp_str} [info]: line 1\n",
312
- " #{@timestamp_str} [info]: line 2\n",
313
- " #{@timestamp_str} [info]: line 3\n",
314
- " #{@timestamp_str} [warn]: line 1\n",
315
- " #{@timestamp_str} [warn]: line 2\n",
316
- " #{@timestamp_str} [warn]: line 3\n",
317
- " #{@timestamp_str} [error]: line 1\n",
318
- " #{@timestamp_str} [error]: line 2\n",
319
- " #{@timestamp_str} [error]: line 3\n",
320
- " #{@timestamp_str} [fatal]: line 1\n",
321
- " #{@timestamp_str} [fatal]: line 2\n",
322
- " #{@timestamp_str} [fatal]: line 3\n"
323
- ][start..-1]
324
- assert_equal(expected, log.out.logs)
325
- end
326
- end
327
-
328
- sub_test_case "suppress repeated backtrace" do
329
- def test_same_log_level
330
- backtrace = ["line 1", "line 2", "line 3"]
331
- dl_opts = {}
332
- dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
333
- logdev = @log_device
334
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
335
- opts = {}
336
- opts[:suppress_repeated_stacktrace] = true
337
- log = Fluent::Log.new(logger, opts)
338
- log.trace_backtrace(backtrace)
339
- log.trace_backtrace(backtrace)
340
- log.trace_backtrace(backtrace + ["line 4"])
341
- log.trace_backtrace(backtrace)
342
- log.trace_backtrace(backtrace)
343
- expected = [
344
- " #{@timestamp_str} [trace]: line 1\n",
345
- " #{@timestamp_str} [trace]: line 2\n",
346
- " #{@timestamp_str} [trace]: line 3\n",
347
- " #{@timestamp_str} [trace]: suppressed same stacktrace\n",
348
- " #{@timestamp_str} [trace]: line 1\n",
349
- " #{@timestamp_str} [trace]: line 2\n",
350
- " #{@timestamp_str} [trace]: line 3\n",
351
- " #{@timestamp_str} [trace]: line 4\n",
352
- " #{@timestamp_str} [trace]: line 1\n",
353
- " #{@timestamp_str} [trace]: line 2\n",
354
- " #{@timestamp_str} [trace]: line 3\n",
355
- " #{@timestamp_str} [trace]: suppressed same stacktrace\n",
356
- ]
357
- assert_equal(expected, log.out.logs)
358
- end
359
-
360
- def test_different_log_level
361
- backtrace = ["line 1", "line 2", "line 3"]
362
- dl_opts = {}
363
- dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
364
- logdev = @log_device
365
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
366
- opts = {}
367
- opts[:suppress_repeated_stacktrace] = true
368
- log = Fluent::Log.new(logger, opts)
369
- log.trace_backtrace(backtrace)
370
- log.debug_backtrace(backtrace)
371
- log.info_backtrace(backtrace)
372
- log.warn_backtrace(backtrace)
373
- log.error_backtrace(backtrace)
374
- log.fatal_backtrace(backtrace)
375
- expected = [
376
- " #{@timestamp_str} [trace]: line 1\n",
377
- " #{@timestamp_str} [trace]: line 2\n",
378
- " #{@timestamp_str} [trace]: line 3\n",
379
- " #{@timestamp_str} [debug]: suppressed same stacktrace\n",
380
- " #{@timestamp_str} [info]: suppressed same stacktrace\n",
381
- " #{@timestamp_str} [warn]: suppressed same stacktrace\n",
382
- " #{@timestamp_str} [error]: suppressed same stacktrace\n",
383
- " #{@timestamp_str} [fatal]: suppressed same stacktrace\n",
384
- ]
385
- assert_equal(expected, log.out.logs)
386
- end
387
- end
388
-
389
- sub_test_case "ignore_repeated_log_interval" do
390
- def test_same_message
391
- message = "This is test"
392
- logger = ServerEngine::DaemonLogger.new(@log_device, {log_level: ServerEngine::DaemonLogger::INFO})
393
- log = Fluent::Log.new(logger, {ignore_repeated_log_interval: 5})
394
-
395
- log.error message
396
- 10.times { |i|
397
- Timecop.freeze(@timestamp + i)
398
- log.error message
399
- }
400
-
401
- expected = [
402
- "2016-04-21 02:58:41 +0000 [error]: This is test\n",
403
- "2016-04-21 02:58:47 +0000 [error]: This is test\n"
404
- ]
405
- assert_equal(expected, log.out.logs)
406
- end
407
-
408
- def test_different_message
409
- message = "This is test"
410
- logger = ServerEngine::DaemonLogger.new(@log_device, {log_level: ServerEngine::DaemonLogger::INFO})
411
- log = Fluent::Log.new(logger, {ignore_repeated_log_interval: 10})
412
-
413
- log.error message
414
- 3.times { |i|
415
- Timecop.freeze(@timestamp + i)
416
- log.error message
417
- log.error message
418
- log.info "Hello! " + message
419
- }
420
-
421
- expected = [
422
- "2016-04-21 02:58:41 +0000 [error]: This is test\n",
423
- "2016-04-21 02:58:41 +0000 [info]: Hello! This is test\n",
424
- "2016-04-21 02:58:42 +0000 [error]: This is test\n",
425
- "2016-04-21 02:58:42 +0000 [info]: Hello! This is test\n",
426
- "2016-04-21 02:58:43 +0000 [error]: This is test\n",
427
- "2016-04-21 02:58:43 +0000 [info]: Hello! This is test\n",
428
- ]
429
- assert_equal(expected, log.out.logs)
430
- end
431
- end
432
-
433
- sub_test_case "ignore_same_log_interval" do
434
- teardown do
435
- Thread.current[:last_same_log] = nil
436
- end
437
-
438
- def test_same_message
439
- message = "This is test"
440
- logger = ServerEngine::DaemonLogger.new(@log_device, {log_level: ServerEngine::DaemonLogger::INFO})
441
- log = Fluent::Log.new(logger, {ignore_same_log_interval: 5})
442
-
443
- log.error message
444
- 10.times { |i|
445
- Timecop.freeze(@timestamp + i + 1)
446
- log.error message
447
- }
448
-
449
- expected = [
450
- "2016-04-21 02:58:41 +0000 [error]: This is test\n",
451
- "2016-04-21 02:58:47 +0000 [error]: This is test\n"
452
- ]
453
- assert_equal(expected, log.out.logs)
454
- end
455
-
456
- def test_different_message
457
- message = "This is test"
458
- logger = ServerEngine::DaemonLogger.new(@log_device, {log_level: ServerEngine::DaemonLogger::INFO})
459
- log = Fluent::Log.new(logger, {ignore_same_log_interval: 10})
460
-
461
- log.error message
462
- 3.times { |i|
463
- Timecop.freeze(@timestamp + i)
464
- log.error message
465
- log.error message
466
- log.info "Hello! " + message
467
- }
468
-
469
- expected = [
470
- "2016-04-21 02:58:41 +0000 [error]: This is test\n",
471
- "2016-04-21 02:58:41 +0000 [info]: Hello! This is test\n",
472
- ]
473
- assert_equal(expected, log.out.logs)
474
- end
475
-
476
- def test_reject_on_max_size
477
- ignore_same_log_interval = 10
478
-
479
- logger = Fluent::Log.new(
480
- ServerEngine::DaemonLogger.new(@log_device, log_level: ServerEngine::DaemonLogger::INFO),
481
- ignore_same_log_interval: ignore_same_log_interval,
482
- )
483
-
484
- # Output unique log every second.
485
- Fluent::Log::IGNORE_SAME_LOG_MAX_CACHE_SIZE.times do |i|
486
- logger.info "Test #{i}"
487
- Timecop.freeze(@timestamp + i)
488
- end
489
- logger.info "Over max size!"
490
-
491
- # The newest cache and the latest caches in `ignore_same_log_interval` should exist.
492
- assert { Thread.current[:last_same_log].size == ignore_same_log_interval + 1 }
493
- end
494
-
495
- def test_clear_on_max_size
496
- ignore_same_log_interval = 10
497
-
498
- logger = Fluent::Log.new(
499
- ServerEngine::DaemonLogger.new(@log_device, log_level: ServerEngine::DaemonLogger::INFO),
500
- ignore_same_log_interval: ignore_same_log_interval,
501
- )
502
-
503
- # Output unique log at the same time.
504
- Fluent::Log::IGNORE_SAME_LOG_MAX_CACHE_SIZE.times do |i|
505
- logger.info "Test #{i}"
506
- end
507
- logger.info "Over max size!"
508
-
509
- # Can't reject old logs, so all cache should be cleared and only the newest should exist.
510
- assert { Thread.current[:last_same_log].size == 1 }
511
- end
512
- end
513
-
514
- def test_dup
515
- dl_opts = {}
516
- dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
517
- logdev = @log_device
518
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
519
- log1 = Fluent::Log.new(logger)
520
- log2 = log1.dup
521
- log1.level = Fluent::Log::LEVEL_DEBUG
522
- assert_equal(Fluent::Log::LEVEL_DEBUG, log1.level)
523
- assert_equal(Fluent::Log::LEVEL_TRACE, log2.level)
524
- end
525
-
526
- def test_format_json
527
- logdev = @log_device
528
- logger = ServerEngine::DaemonLogger.new(logdev)
529
- log = Fluent::Log.new(logger)
530
- log.format = :json
531
- log.level = Fluent::Log::LEVEL_TRACE
532
- log.trace "trace log"
533
- log.debug "debug log"
534
- log.info "info log"
535
- log.warn "warn log"
536
- log.error "error log"
537
- log.fatal "fatal log"
538
- expected = [
539
- "#{@timestamp_str} [trace]: trace log\n",
540
- "#{@timestamp_str} [debug]: debug log\n",
541
- "#{@timestamp_str} [info]: info log\n",
542
- "#{@timestamp_str} [warn]: warn log\n",
543
- "#{@timestamp_str} [error]: error log\n",
544
- "#{@timestamp_str} [fatal]: fatal log\n"
545
- ]
546
- assert_equal(expected, log.out.logs.map { |l|
547
- r = JSON.parse(l)
548
- "#{r['time']} [#{r['level']}]: #{r['message']}\n"
549
- })
550
- end
551
-
552
- def test_time_format
553
- logdev = @log_device
554
- logger = ServerEngine::DaemonLogger.new(logdev)
555
- log = Fluent::Log.new(logger)
556
- log.time_format = "%Y"
557
- log.level = Fluent::Log::LEVEL_TRACE
558
- log.trace "trace log"
559
- log.debug "debug log"
560
- log.info "info log"
561
- log.warn "warn log"
562
- log.error "error log"
563
- log.fatal "fatal log"
564
- timestamp_str = @timestamp.strftime("%Y")
565
- expected = [
566
- "#{timestamp_str} [trace]: trace log\n",
567
- "#{timestamp_str} [debug]: debug log\n",
568
- "#{timestamp_str} [info]: info log\n",
569
- "#{timestamp_str} [warn]: warn log\n",
570
- "#{timestamp_str} [error]: error log\n",
571
- "#{timestamp_str} [fatal]: fatal log\n"
572
- ]
573
- assert_equal(expected, log.out.logs)
574
- end
575
-
576
- def test_disable_events
577
- dl_opts = {}
578
- dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
579
- logdev = @log_device
580
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
581
- log = Fluent::Log.new(logger)
582
- log.enable_event(true)
583
- engine = log.instance_variable_get("@engine")
584
- mock(engine).push_log_event(anything, anything, anything).once
585
- log.trace "trace log"
586
- log.disable_events(Thread.current)
587
- log.trace "trace log"
588
- end
589
-
590
- def test_level_reload
591
- dl_opts = {}
592
- dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
593
- logdev = @log_device
594
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
595
- log = Fluent::Log.new(logger)
596
- assert_equal(ServerEngine::DaemonLogger::TRACE, logger.level)
597
- assert_equal(Fluent::Log::LEVEL_TRACE, log.level)
598
- # change daemon logger side level
599
- logger.level = ServerEngine::DaemonLogger::DEBUG
600
- assert_equal(ServerEngine::DaemonLogger::DEBUG, logger.level)
601
- # check fluentd log side level is also changed
602
- assert_equal(Fluent::Log::LEVEL_DEBUG, log.level)
603
- end
604
-
605
- DAY_SEC = 60 * 60 * 24
606
- data(
607
- rotate_daily_age: ['daily', 100000, DAY_SEC + 1],
608
- rotate_weekly_age: ['weekly', 100000, DAY_SEC * 7 + 1],
609
- rotate_monthly_age: ['monthly', 100000, DAY_SEC * 31 + 1],
610
- rotate_size: [1, 100, 0, '0'],
611
- )
612
- def test_log_with_logdevio(expected)
613
- with_timezone('utc') do
614
- @timestamp = Time.parse("2016-04-21 00:00:00 +0000")
615
- @timestamp_str = @timestamp.strftime("%Y-%m-%d %H:%M:%S %z")
616
- Timecop.freeze(@timestamp)
617
-
618
- rotate_age, rotate_size, travel_term = expected
619
- path = "#{@tmp_dir}/log-dev-io-#{rotate_size}-#{rotate_age}"
620
-
621
- logdev = Fluent::LogDeviceIO.new(path, shift_age: rotate_age, shift_size: rotate_size)
622
- logger = ServerEngine::DaemonLogger.new(logdev)
623
- log = Fluent::Log.new(logger)
624
-
625
- msg = 'a' * 101
626
- log.info msg
627
- assert_match msg, File.read(path)
628
-
629
- Timecop.freeze(@timestamp + travel_term)
630
-
631
- msg2 = 'b' * 101
632
- log.info msg2
633
- c = File.read(path)
634
-
635
- assert_match msg2, c
636
- assert_not_equal msg, c
637
- end
638
- end
639
-
640
- def test_log_rotates_specified_size_with_logdevio
641
- with_timezone('utc') do
642
- begin
643
- rotate_age = 2
644
- rotate_size = 100
645
- path = "#{@tmp_dir}/log-dev-io-#{rotate_size}-#{rotate_age}"
646
- path0 = path + '.0'
647
- path1 = path + '.1'
648
-
649
- logdev = Fluent::LogDeviceIO.new(path, shift_age: rotate_age, shift_size: rotate_size)
650
- logger = ServerEngine::DaemonLogger.new(logdev)
651
- log = Fluent::Log.new(logger)
652
-
653
- msg = 'a' * 101
654
- log.info msg
655
- assert_match msg, File.read(path)
656
- assert_true File.exist?(path)
657
- assert_true !File.exist?(path0)
658
- assert_true !File.exist?(path1)
659
-
660
- # create log.0
661
- msg2 = 'b' * 101
662
- log.info msg2
663
- c = File.read(path)
664
- c0 = File.read(path0)
665
- assert_match msg2, c
666
- assert_match msg, c0
667
- assert_true File.exist?(path)
668
- assert_true File.exist?(path0)
669
- assert_true !File.exist?(path1)
670
-
671
- # rotate
672
- msg3 = 'c' * 101
673
- log.info msg3
674
- c = File.read(path)
675
- c0 = File.read(path0)
676
- assert_match msg3, c
677
- assert_match msg2, c0
678
- assert_true File.exist?(path)
679
- assert_true File.exist?(path0)
680
- assert_true !File.exist?(path1)
681
- ensure
682
- logdev&.close
683
- end
684
- end
685
- end
686
-
687
- def test_reopen
688
- path = Pathname(@tmp_dir) + "fluent.log"
689
-
690
- logdev = Fluent::LogDeviceIO.new(path.to_s)
691
- logger = ServerEngine::DaemonLogger.new(logdev)
692
- log = Fluent::Log.new(logger, path: path)
693
-
694
- message = "This is test message."
695
-
696
- log.info message
697
- log.reopen!
698
- log.info message
699
-
700
- assert { path.read.lines.count{ |line| line.include?(message) } == 2 }
701
- # Assert reopening the same file.
702
- # Especially, on Windows, the filepath is fixed for each process with rotate,
703
- # so we need to care about this.
704
- assert { path.parent.entries.size == 3 } # [".", "..", "fluent.log"]
705
- ensure
706
- logdev&.close
707
- end
708
- end
709
-
710
- class PluginLoggerTest < Test::Unit::TestCase
711
- def setup
712
- @log_device = Fluent::Test::DummyLogDevice.new
713
- @timestamp = Time.parse("2016-04-21 02:58:41 +0000")
714
- @timestamp_str = @timestamp.strftime("%Y-%m-%d %H:%M:%S %z")
715
- Timecop.freeze(@timestamp)
716
- dl_opts = {}
717
- dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
718
- logdev = @log_device
719
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
720
- @logger = Fluent::Log.new(logger)
721
- end
722
-
723
- def teardown
724
- @log_device.reset
725
- Timecop.return
726
- Thread.current[:last_repeated_stacktrace] = nil
727
- end
728
-
729
- def test_initialize
730
- log = Fluent::PluginLogger.new(@logger)
731
- logger = log.instance_variable_get("@logger")
732
- assert_equal(logger, @logger)
733
- end
734
-
735
- def test_level
736
- log = Fluent::PluginLogger.new(@logger)
737
- assert_equal(log.level, @logger.level)
738
- log.level = "fatal"
739
- assert_equal(Fluent::Log::LEVEL_FATAL, log.level)
740
- assert_equal(Fluent::Log::LEVEL_TRACE, @logger.level)
741
- end
742
-
743
- def test_enable_color
744
- log = Fluent::PluginLogger.new(@logger)
745
- log.enable_color(true)
746
- assert_equal(true, log.enable_color?)
747
- assert_equal(true, @logger.enable_color?)
748
- log.enable_color(false)
749
- assert_equal(false, log.enable_color?)
750
- assert_equal(false, @logger.enable_color?)
751
- log.enable_color
752
- assert_equal(true, log.enable_color?)
753
- assert_equal(true, @logger.enable_color?)
754
- end
755
-
756
- def test_log_type_in_default
757
- mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_TRACE).once
758
- mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_DEBUG).once
759
- mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_INFO).once
760
- mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_WARN).once
761
- mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_ERROR).once
762
- mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_FATAL).once
763
-
764
- @logger.trace "trace log 1"
765
- @logger.debug "debug log 2"
766
- @logger.info "info log 3"
767
- @logger.warn "warn log 4"
768
- @logger.error "error log 5"
769
- @logger.fatal "fatal log 6"
770
- end
771
-
772
- def test_log_types
773
- mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_TRACE).once
774
- mock(@logger).caller_line(:supervisor, Time.now, 1, Fluent::Log::LEVEL_DEBUG).once
775
- mock(@logger).caller_line(:worker0, Time.now, 1, Fluent::Log::LEVEL_INFO).once
776
- mock(@logger).caller_line(:default, Time.now, 1, Fluent::Log::LEVEL_WARN).once
777
- mock(@logger).caller_line(:supervisor, Time.now, 1, Fluent::Log::LEVEL_ERROR).once
778
- mock(@logger).caller_line(:worker0, Time.now, 1, Fluent::Log::LEVEL_FATAL).once
779
-
780
- @logger.trace :default, "trace log 1"
781
- @logger.debug :supervisor, "debug log 2"
782
- @logger.info :worker0, "info log 3"
783
- @logger.warn :default, "warn log 4"
784
- @logger.error :supervisor, "error log 5"
785
- @logger.fatal :worker0, "fatal log 6"
786
- end
787
-
788
- sub_test_case "supervisor process type" do
789
- setup do
790
- dl_opts = {}
791
- dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
792
- logdev = @log_device
793
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
794
- @logger = Fluent::Log.new(logger, process_type: :supervisor)
795
- end
796
-
797
- test 'default type logs are shown w/o worker id' do
798
- @logger.info "yaaay"
799
- @logger.info :default, "booo"
800
- assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
801
- assert{ @log_device.logs.include?("#{@timestamp_str} [info]: booo\n") }
802
- end
803
-
804
- test 'supervisor type logs are shown w/o worker id' do
805
- @logger.info :supervisor, "yaaay"
806
- assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
807
- end
808
-
809
- test 'worker0 type logs are not shown' do
810
- @logger.info :worker0, "yaaay"
811
- assert{ !@log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
812
- end
813
- end
814
-
815
- sub_test_case "worker0 process type" do
816
- setup do
817
- dl_opts = {}
818
- dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
819
- logdev = @log_device
820
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
821
- @logger = Fluent::Log.new(logger, process_type: :worker0, worker_id: 10)
822
- end
823
-
824
- test 'default type logs are shown w/ worker id' do
825
- @logger.info "yaaay"
826
- @logger.info :default, "booo"
827
- assert{ @log_device.logs.include?("#{@timestamp_str} [info]: #10 yaaay\n") }
828
- assert{ @log_device.logs.include?("#{@timestamp_str} [info]: #10 booo\n") }
829
- end
830
-
831
- test 'supervisor type logs are not shown' do
832
- @logger.info :supervisor, "yaaay"
833
- assert{ !@log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
834
- end
835
-
836
- test 'worker0 type logs are shown w/o worker id' do
837
- @logger.info :worker0, "yaaay"
838
- assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
839
- end
840
- end
841
-
842
- sub_test_case "workers process type" do
843
- setup do
844
- dl_opts = {}
845
- dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
846
- logdev = @log_device
847
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
848
- @logger = Fluent::Log.new(logger, process_type: :workers, worker_id: 7)
849
- end
850
-
851
- test 'default type logs are shown w/ worker id' do
852
- @logger.info "yaaay"
853
- @logger.info :default, "booo"
854
- assert{ @log_device.logs.include?("#{@timestamp_str} [info]: #7 yaaay\n") }
855
- assert{ @log_device.logs.include?("#{@timestamp_str} [info]: #7 booo\n") }
856
- end
857
-
858
- test 'supervisor type logs are not shown' do
859
- @logger.info :supervisor, "yaaay"
860
- assert{ !@log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
861
- end
862
-
863
- test 'worker0 type logs are not shown' do
864
- @logger.info :worker0, "yaaay"
865
- assert{ !@log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
866
- end
867
- end
868
-
869
- sub_test_case "standalone process type" do
870
- setup do
871
- dl_opts = {}
872
- dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE
873
- logdev = @log_device
874
- logger = ServerEngine::DaemonLogger.new(logdev, dl_opts)
875
- @logger = Fluent::Log.new(logger, process_type: :standalone, worker_id: 0)
876
- end
877
-
878
- test 'default type logs are shown w/o worker id' do
879
- @logger.info "yaaay"
880
- @logger.info :default, "booo"
881
- assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
882
- assert{ @log_device.logs.include?("#{@timestamp_str} [info]: booo\n") }
883
- end
884
-
885
- test 'supervisor type logs are shown w/o worker id' do
886
- @logger.info :supervisor, "yaaay"
887
- assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
888
- end
889
-
890
- test 'worker0 type logs are shown w/o worker id' do
891
- @logger.info :worker0, "yaaay"
892
- assert{ @log_device.logs.include?("#{@timestamp_str} [info]: yaaay\n") }
893
- end
894
- end
895
-
896
- sub_test_case "delegators" do
897
- def setup
898
- super
899
- @log = Fluent::PluginLogger.new(@logger)
900
- end
901
-
902
- def test_enable_debug
903
- mock(@logger).enable_debug
904
- @log.enable_debug
905
- end
906
-
907
- def test_enable_event
908
- mock(@logger).enable_event
909
- @log.enable_event
910
- end
911
-
912
- def test_disable_events
913
- mock(@logger).disable_events(Thread.current)
914
- @log.disable_events(Thread.current)
915
- end
916
-
917
- def test_event
918
- mock(@logger).event(Fluent::Log::LEVEL_TRACE, { key: "value" })
919
- @log.event(Fluent::Log::LEVEL_TRACE, { key: "value" })
920
- end
921
-
922
- def test_caller_line
923
- mock(@logger).caller_line(Time.now, 1, Fluent::Log::LEVEL_TRACE)
924
- @log.caller_line(Time.now, 1, Fluent::Log::LEVEL_TRACE)
925
- end
926
-
927
- def test_puts
928
- mock(@logger).puts("log")
929
- @log.puts("log")
930
- end
931
-
932
- def test_write
933
- mock(@logger).write("log")
934
- @log.write("log")
935
- end
936
-
937
- def test_write_alias
938
- assert(@log.respond_to?(:<<))
939
- mock(@log.out).write("log")
940
- @log << "log"
941
- end
942
-
943
- def test_out
944
- assert_equal(@log.out, @logger.out)
945
- @log.out = Object.new
946
- assert_equal(@log.out, @logger.out)
947
- end
948
-
949
- def test_optional_header
950
- assert_equal(@log.optional_header, @logger.optional_header)
951
- @log.optional_header = "optional_header"
952
- assert_equal(@log.optional_header, @logger.optional_header)
953
- end
954
-
955
- def test_optional_attrs
956
- assert_equal(@log.optional_attrs, @logger.optional_attrs)
957
- @log.optional_attrs = "optional_attrs"
958
- assert_equal(@log.optional_attrs, @logger.optional_attrs)
959
- end
960
- end
961
-
962
- sub_test_case "partially delegated" do
963
- def setup
964
- super
965
- @log = Fluent::PluginLogger.new(@logger)
966
- end
967
-
968
- data(
969
- text: [:text, "2016-04-21 02:58:41 +0000 [info]: yaaay\n"],
970
- json: [:json, %Q({"time":"2016-04-21 02:58:41 +0000","level":"info","message":"yaaay"}\n)],
971
- )
972
- def test_format(data)
973
- fmt, expected_log_line = data
974
- with_timezone('utc') {
975
- @log.format = fmt
976
- @log.info "yaaay"
977
- }
978
- assert{ @log_device.logs.include? expected_log_line }
979
- end
980
-
981
- data(
982
- text: [:text, "2016 [info]: yaaay\n"],
983
- json: [:json, %Q({"time":"2016","level":"info","message":"yaaay"}\n)],
984
- )
985
- def test_time_format(data)
986
- fmt, expected_log_line = data
987
- @log.format = fmt
988
- @log.time_format = "%Y"
989
- @log.info "yaaay"
990
- assert{ @log_device.logs.include? expected_log_line }
991
- end
992
- end
993
- end
994
-
995
- class PluginLoggerMixinTest < Test::Unit::TestCase
996
- class DummyPlugin < Fluent::Plugin::Input
997
- end
998
-
999
- def create_driver(conf)
1000
- Fluent::Test::Driver::Input.new(DummyPlugin).configure(conf)
1001
- end
1002
-
1003
- def setup
1004
- Fluent::Test.setup
1005
- end
1006
-
1007
- def test_default_log
1008
- plugin = DummyPlugin.new
1009
- log = plugin.log
1010
- assert_equal($log, log)
1011
- end
1012
-
1013
- def test_log_level
1014
- d = create_driver(%[log_level fatal])
1015
- log = d.instance.log
1016
- assert_not_equal($log.level, log.level)
1017
- assert_equal(Fluent::Log::LEVEL_FATAL, log.level)
1018
- end
1019
-
1020
- def test_optional_header
1021
- d = create_driver(%[@id myplugin])
1022
- log = d.instance.log
1023
- assert_equal("[myplugin] ", log.optional_header)
1024
- assert_equal({}, log.optional_attrs)
1025
- end
1026
-
1027
- def test_start
1028
- plugin = DummyPlugin.new
1029
- mock(plugin.log).should_receive(:reset).never
1030
- plugin.start
1031
- end
1032
-
1033
- def test_terminate
1034
- plugin = DummyPlugin.new
1035
- mock(plugin.log).reset
1036
- plugin.terminate
1037
- end
1038
- end
1039
-
1040
- class LogDeviceIOTest < Test::Unit::TestCase
1041
- test 'flush' do
1042
- io = StringIO.new
1043
- logdev = Fluent::LogDeviceIO.new(io)
1044
- assert_equal io, logdev.flush
1045
-
1046
- io.instance_eval { undef :flush }
1047
- logdev = Fluent::LogDeviceIO.new(io)
1048
- assert_raise NoMethodError do
1049
- logdev.flush
1050
- end
1051
- end
1052
-
1053
- test 'tty?' do
1054
- io = StringIO.new
1055
- logdev = Fluent::LogDeviceIO.new(io)
1056
- assert_equal io.tty?, logdev.tty?
1057
-
1058
- io.instance_eval { undef :tty? }
1059
- logdev = Fluent::LogDeviceIO.new(io)
1060
- assert_raise NoMethodError do
1061
- logdev.tty?
1062
- end
1063
- end
1064
-
1065
- test 'sync=' do
1066
- io = StringIO.new
1067
- logdev = Fluent::LogDeviceIO.new(io)
1068
- assert_true logdev.sync = true
1069
-
1070
- io.instance_eval { undef :sync= }
1071
- logdev = Fluent::LogDeviceIO.new(io)
1072
- assert_raise NoMethodError do
1073
- logdev.sync = true
1074
- end
1075
- end
1076
- end