fluentd 1.16.5-x64-mingw-ucrt → 1.17.1-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.
Files changed (268) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +88 -0
  3. data/README.md +2 -1
  4. data/Rakefile +1 -1
  5. data/SECURITY.md +2 -2
  6. data/fluent.conf +14 -14
  7. data/lib/fluent/command/binlog_reader.rb +1 -1
  8. data/lib/fluent/command/cap_ctl.rb +4 -4
  9. data/lib/fluent/compat/call_super_mixin.rb +3 -3
  10. data/lib/fluent/compat/propagate_default.rb +4 -4
  11. data/lib/fluent/config/configure_proxy.rb +2 -2
  12. data/lib/fluent/config/types.rb +1 -1
  13. data/lib/fluent/config/yaml_parser/parser.rb +4 -0
  14. data/lib/fluent/configurable.rb +2 -2
  15. data/lib/fluent/counter/mutex_hash.rb +1 -1
  16. data/lib/fluent/fluent_log_event_router.rb +0 -2
  17. data/lib/fluent/log/console_adapter.rb +4 -2
  18. data/lib/fluent/plugin/buf_file.rb +1 -1
  19. data/lib/fluent/plugin/buffer/file_chunk.rb +1 -1
  20. data/lib/fluent/plugin/buffer/file_single_chunk.rb +2 -3
  21. data/lib/fluent/plugin/filter_parser.rb +26 -8
  22. data/lib/fluent/plugin/in_exec.rb +14 -2
  23. data/lib/fluent/plugin/in_http.rb +19 -54
  24. data/lib/fluent/plugin/in_sample.rb +13 -7
  25. data/lib/fluent/plugin/in_tail.rb +99 -25
  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 +137 -13
  29. data/lib/fluent/plugin/owned_by_mixin.rb +0 -1
  30. data/lib/fluent/plugin/parser_json.rb +26 -17
  31. data/lib/fluent/plugin/parser_msgpack.rb +24 -3
  32. data/lib/fluent/plugin_helper/http_server/server.rb +1 -1
  33. data/lib/fluent/plugin_helper/metrics.rb +2 -2
  34. data/lib/fluent/registry.rb +6 -6
  35. data/lib/fluent/test/output_test.rb +1 -1
  36. data/lib/fluent/unique_id.rb +1 -1
  37. data/lib/fluent/version.rb +1 -1
  38. data/templates/new_gem/fluent-plugin.gemspec.erb +6 -5
  39. metadata +109 -459
  40. data/.github/ISSUE_TEMPLATE/bug_report.yml +0 -71
  41. data/.github/ISSUE_TEMPLATE/config.yml +0 -5
  42. data/.github/ISSUE_TEMPLATE/feature_request.yml +0 -39
  43. data/.github/ISSUE_TEMPLATE.md +0 -17
  44. data/.github/PULL_REQUEST_TEMPLATE.md +0 -14
  45. data/.github/workflows/stale-actions.yml +0 -24
  46. data/.github/workflows/test.yml +0 -32
  47. data/.gitignore +0 -30
  48. data/Gemfile +0 -9
  49. data/fluentd.gemspec +0 -54
  50. data/test/command/test_binlog_reader.rb +0 -362
  51. data/test/command/test_ca_generate.rb +0 -70
  52. data/test/command/test_cap_ctl.rb +0 -100
  53. data/test/command/test_cat.rb +0 -128
  54. data/test/command/test_ctl.rb +0 -56
  55. data/test/command/test_fluentd.rb +0 -1291
  56. data/test/command/test_plugin_config_formatter.rb +0 -397
  57. data/test/command/test_plugin_generator.rb +0 -109
  58. data/test/compat/test_calls_super.rb +0 -166
  59. data/test/compat/test_parser.rb +0 -92
  60. data/test/config/assertions.rb +0 -42
  61. data/test/config/test_config_parser.rb +0 -551
  62. data/test/config/test_configurable.rb +0 -1784
  63. data/test/config/test_configure_proxy.rb +0 -604
  64. data/test/config/test_dsl.rb +0 -415
  65. data/test/config/test_element.rb +0 -518
  66. data/test/config/test_literal_parser.rb +0 -309
  67. data/test/config/test_plugin_configuration.rb +0 -56
  68. data/test/config/test_section.rb +0 -191
  69. data/test/config/test_system_config.rb +0 -195
  70. data/test/config/test_types.rb +0 -408
  71. data/test/counter/test_client.rb +0 -563
  72. data/test/counter/test_error.rb +0 -44
  73. data/test/counter/test_mutex_hash.rb +0 -179
  74. data/test/counter/test_server.rb +0 -589
  75. data/test/counter/test_store.rb +0 -258
  76. data/test/counter/test_validator.rb +0 -137
  77. data/test/helper.rb +0 -155
  78. data/test/helpers/fuzzy_assert.rb +0 -89
  79. data/test/helpers/process_extenstion.rb +0 -33
  80. data/test/log/test_console_adapter.rb +0 -110
  81. data/test/plugin/data/2010/01/20100102-030405.log +0 -0
  82. data/test/plugin/data/2010/01/20100102-030406.log +0 -0
  83. data/test/plugin/data/2010/01/20100102.log +0 -0
  84. data/test/plugin/data/log/bar +0 -0
  85. data/test/plugin/data/log/foo/bar.log +0 -0
  86. data/test/plugin/data/log/foo/bar2 +0 -0
  87. data/test/plugin/data/log/test.log +0 -0
  88. data/test/plugin/data/sd_file/config +0 -11
  89. data/test/plugin/data/sd_file/config.json +0 -17
  90. data/test/plugin/data/sd_file/config.yaml +0 -11
  91. data/test/plugin/data/sd_file/config.yml +0 -11
  92. data/test/plugin/data/sd_file/invalid_config.yml +0 -7
  93. data/test/plugin/in_tail/test_fifo.rb +0 -121
  94. data/test/plugin/in_tail/test_io_handler.rb +0 -150
  95. data/test/plugin/in_tail/test_position_file.rb +0 -346
  96. data/test/plugin/out_forward/test_ack_handler.rb +0 -140
  97. data/test/plugin/out_forward/test_connection_manager.rb +0 -145
  98. data/test/plugin/out_forward/test_handshake_protocol.rb +0 -112
  99. data/test/plugin/out_forward/test_load_balancer.rb +0 -106
  100. data/test/plugin/out_forward/test_socket_cache.rb +0 -174
  101. data/test/plugin/test_bare_output.rb +0 -131
  102. data/test/plugin/test_base.rb +0 -247
  103. data/test/plugin/test_buf_file.rb +0 -1314
  104. data/test/plugin/test_buf_file_single.rb +0 -898
  105. data/test/plugin/test_buf_memory.rb +0 -42
  106. data/test/plugin/test_buffer.rb +0 -1493
  107. data/test/plugin/test_buffer_chunk.rb +0 -209
  108. data/test/plugin/test_buffer_file_chunk.rb +0 -871
  109. data/test/plugin/test_buffer_file_single_chunk.rb +0 -611
  110. data/test/plugin/test_buffer_memory_chunk.rb +0 -339
  111. data/test/plugin/test_compressable.rb +0 -87
  112. data/test/plugin/test_file_util.rb +0 -96
  113. data/test/plugin/test_filter.rb +0 -368
  114. data/test/plugin/test_filter_grep.rb +0 -697
  115. data/test/plugin/test_filter_parser.rb +0 -731
  116. data/test/plugin/test_filter_record_transformer.rb +0 -577
  117. data/test/plugin/test_filter_stdout.rb +0 -207
  118. data/test/plugin/test_formatter_csv.rb +0 -136
  119. data/test/plugin/test_formatter_hash.rb +0 -38
  120. data/test/plugin/test_formatter_json.rb +0 -61
  121. data/test/plugin/test_formatter_ltsv.rb +0 -70
  122. data/test/plugin/test_formatter_msgpack.rb +0 -28
  123. data/test/plugin/test_formatter_out_file.rb +0 -116
  124. data/test/plugin/test_formatter_single_value.rb +0 -44
  125. data/test/plugin/test_formatter_tsv.rb +0 -76
  126. data/test/plugin/test_in_debug_agent.rb +0 -49
  127. data/test/plugin/test_in_exec.rb +0 -261
  128. data/test/plugin/test_in_forward.rb +0 -1178
  129. data/test/plugin/test_in_gc_stat.rb +0 -62
  130. data/test/plugin/test_in_http.rb +0 -1102
  131. data/test/plugin/test_in_monitor_agent.rb +0 -922
  132. data/test/plugin/test_in_object_space.rb +0 -66
  133. data/test/plugin/test_in_sample.rb +0 -190
  134. data/test/plugin/test_in_syslog.rb +0 -505
  135. data/test/plugin/test_in_tail.rb +0 -3288
  136. data/test/plugin/test_in_tcp.rb +0 -328
  137. data/test/plugin/test_in_udp.rb +0 -296
  138. data/test/plugin/test_in_unix.rb +0 -181
  139. data/test/plugin/test_input.rb +0 -137
  140. data/test/plugin/test_metadata.rb +0 -89
  141. data/test/plugin/test_metrics.rb +0 -294
  142. data/test/plugin/test_metrics_local.rb +0 -96
  143. data/test/plugin/test_multi_output.rb +0 -204
  144. data/test/plugin/test_out_copy.rb +0 -308
  145. data/test/plugin/test_out_exec.rb +0 -312
  146. data/test/plugin/test_out_exec_filter.rb +0 -606
  147. data/test/plugin/test_out_file.rb +0 -1038
  148. data/test/plugin/test_out_forward.rb +0 -1349
  149. data/test/plugin/test_out_http.rb +0 -429
  150. data/test/plugin/test_out_null.rb +0 -105
  151. data/test/plugin/test_out_relabel.rb +0 -28
  152. data/test/plugin/test_out_roundrobin.rb +0 -146
  153. data/test/plugin/test_out_secondary_file.rb +0 -458
  154. data/test/plugin/test_out_stdout.rb +0 -205
  155. data/test/plugin/test_out_stream.rb +0 -103
  156. data/test/plugin/test_output.rb +0 -1334
  157. data/test/plugin/test_output_as_buffered.rb +0 -2024
  158. data/test/plugin/test_output_as_buffered_backup.rb +0 -363
  159. data/test/plugin/test_output_as_buffered_compress.rb +0 -179
  160. data/test/plugin/test_output_as_buffered_overflow.rb +0 -250
  161. data/test/plugin/test_output_as_buffered_retries.rb +0 -966
  162. data/test/plugin/test_output_as_buffered_secondary.rb +0 -882
  163. data/test/plugin/test_output_as_standard.rb +0 -374
  164. data/test/plugin/test_owned_by.rb +0 -35
  165. data/test/plugin/test_parser.rb +0 -399
  166. data/test/plugin/test_parser_apache.rb +0 -42
  167. data/test/plugin/test_parser_apache2.rb +0 -47
  168. data/test/plugin/test_parser_apache_error.rb +0 -45
  169. data/test/plugin/test_parser_csv.rb +0 -200
  170. data/test/plugin/test_parser_json.rb +0 -138
  171. data/test/plugin/test_parser_labeled_tsv.rb +0 -160
  172. data/test/plugin/test_parser_multiline.rb +0 -111
  173. data/test/plugin/test_parser_nginx.rb +0 -88
  174. data/test/plugin/test_parser_none.rb +0 -52
  175. data/test/plugin/test_parser_regexp.rb +0 -284
  176. data/test/plugin/test_parser_syslog.rb +0 -650
  177. data/test/plugin/test_parser_tsv.rb +0 -122
  178. data/test/plugin/test_sd_file.rb +0 -228
  179. data/test/plugin/test_sd_srv.rb +0 -230
  180. data/test/plugin/test_storage.rb +0 -167
  181. data/test/plugin/test_storage_local.rb +0 -335
  182. data/test/plugin/test_string_util.rb +0 -26
  183. data/test/plugin_helper/data/cert/cert-key.pem +0 -27
  184. data/test/plugin_helper/data/cert/cert-with-CRLF.pem +0 -19
  185. data/test/plugin_helper/data/cert/cert-with-no-newline.pem +0 -19
  186. data/test/plugin_helper/data/cert/cert.pem +0 -19
  187. data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +0 -27
  188. data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +0 -20
  189. data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +0 -27
  190. data/test/plugin_helper/data/cert/cert_chains/cert.pem +0 -40
  191. data/test/plugin_helper/data/cert/empty.pem +0 -0
  192. data/test/plugin_helper/data/cert/generate_cert.rb +0 -125
  193. data/test/plugin_helper/data/cert/with_ca/ca-cert-key-pass.pem +0 -30
  194. data/test/plugin_helper/data/cert/with_ca/ca-cert-key.pem +0 -27
  195. data/test/plugin_helper/data/cert/with_ca/ca-cert-pass.pem +0 -20
  196. data/test/plugin_helper/data/cert/with_ca/ca-cert.pem +0 -20
  197. data/test/plugin_helper/data/cert/with_ca/cert-key-pass.pem +0 -30
  198. data/test/plugin_helper/data/cert/with_ca/cert-key.pem +0 -27
  199. data/test/plugin_helper/data/cert/with_ca/cert-pass.pem +0 -21
  200. data/test/plugin_helper/data/cert/with_ca/cert.pem +0 -21
  201. data/test/plugin_helper/data/cert/without_ca/cert-key-pass.pem +0 -30
  202. data/test/plugin_helper/data/cert/without_ca/cert-key.pem +0 -27
  203. data/test/plugin_helper/data/cert/without_ca/cert-pass.pem +0 -20
  204. data/test/plugin_helper/data/cert/without_ca/cert.pem +0 -20
  205. data/test/plugin_helper/http_server/test_app.rb +0 -65
  206. data/test/plugin_helper/http_server/test_route.rb +0 -32
  207. data/test/plugin_helper/service_discovery/test_manager.rb +0 -93
  208. data/test/plugin_helper/service_discovery/test_round_robin_balancer.rb +0 -21
  209. data/test/plugin_helper/test_cert_option.rb +0 -25
  210. data/test/plugin_helper/test_child_process.rb +0 -862
  211. data/test/plugin_helper/test_compat_parameters.rb +0 -358
  212. data/test/plugin_helper/test_event_emitter.rb +0 -80
  213. data/test/plugin_helper/test_event_loop.rb +0 -52
  214. data/test/plugin_helper/test_extract.rb +0 -194
  215. data/test/plugin_helper/test_formatter.rb +0 -255
  216. data/test/plugin_helper/test_http_server_helper.rb +0 -372
  217. data/test/plugin_helper/test_inject.rb +0 -561
  218. data/test/plugin_helper/test_metrics.rb +0 -137
  219. data/test/plugin_helper/test_parser.rb +0 -264
  220. data/test/plugin_helper/test_record_accessor.rb +0 -238
  221. data/test/plugin_helper/test_retry_state.rb +0 -1006
  222. data/test/plugin_helper/test_server.rb +0 -1895
  223. data/test/plugin_helper/test_service_discovery.rb +0 -165
  224. data/test/plugin_helper/test_socket.rb +0 -146
  225. data/test/plugin_helper/test_storage.rb +0 -542
  226. data/test/plugin_helper/test_thread.rb +0 -164
  227. data/test/plugin_helper/test_timer.rb +0 -130
  228. data/test/scripts/exec_script.rb +0 -32
  229. data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +0 -7
  230. data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +0 -7
  231. data/test/scripts/fluent/plugin/formatter_known.rb +0 -8
  232. data/test/scripts/fluent/plugin/out_test.rb +0 -81
  233. data/test/scripts/fluent/plugin/out_test2.rb +0 -80
  234. data/test/scripts/fluent/plugin/parser_known.rb +0 -4
  235. data/test/test_capability.rb +0 -74
  236. data/test/test_clock.rb +0 -164
  237. data/test/test_config.rb +0 -369
  238. data/test/test_configdsl.rb +0 -148
  239. data/test/test_daemonizer.rb +0 -91
  240. data/test/test_engine.rb +0 -203
  241. data/test/test_event.rb +0 -531
  242. data/test/test_event_router.rb +0 -348
  243. data/test/test_event_time.rb +0 -199
  244. data/test/test_file_wrapper.rb +0 -53
  245. data/test/test_filter.rb +0 -121
  246. data/test/test_fluent_log_event_router.rb +0 -99
  247. data/test/test_formatter.rb +0 -369
  248. data/test/test_input.rb +0 -31
  249. data/test/test_log.rb +0 -1076
  250. data/test/test_match.rb +0 -148
  251. data/test/test_mixin.rb +0 -351
  252. data/test/test_msgpack_factory.rb +0 -50
  253. data/test/test_oj_options.rb +0 -55
  254. data/test/test_output.rb +0 -278
  255. data/test/test_plugin.rb +0 -251
  256. data/test/test_plugin_classes.rb +0 -370
  257. data/test/test_plugin_helper.rb +0 -81
  258. data/test/test_plugin_id.rb +0 -119
  259. data/test/test_process.rb +0 -14
  260. data/test/test_root_agent.rb +0 -951
  261. data/test/test_static_config_analysis.rb +0 -177
  262. data/test/test_supervisor.rb +0 -821
  263. data/test/test_test_drivers.rb +0 -136
  264. data/test/test_time_formatter.rb +0 -301
  265. data/test/test_time_parser.rb +0 -362
  266. data/test/test_tls.rb +0 -65
  267. data/test/test_unique_id.rb +0 -47
  268. 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