fluentd 0.12.40 → 1.6.2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of fluentd might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.github/ISSUE_TEMPLATE/bug_report.md +39 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +23 -0
- data/.github/ISSUE_TEMPLATE.md +17 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +13 -0
- data/.gitignore +5 -0
- data/.gitlab/cicd-template.yaml +10 -0
- data/.gitlab-ci.yml +147 -0
- data/.travis.yml +56 -20
- data/ADOPTERS.md +5 -0
- data/CHANGELOG.md +1369 -0
- data/CONTRIBUTING.md +16 -5
- data/GOVERNANCE.md +55 -0
- data/Gemfile +5 -0
- data/GithubWorkflow.md +78 -0
- data/LICENSE +202 -0
- data/MAINTAINERS.md +7 -0
- data/README.md +23 -11
- data/Rakefile +48 -2
- data/Vagrantfile +17 -0
- data/appveyor.yml +37 -0
- data/bin/fluent-binlog-reader +7 -0
- data/bin/fluent-ca-generate +6 -0
- data/bin/fluent-plugin-config-format +5 -0
- data/bin/fluent-plugin-generate +5 -0
- data/bin/fluentd +3 -0
- data/code-of-conduct.md +3 -0
- data/example/copy_roundrobin.conf +39 -0
- data/example/counter.conf +18 -0
- data/example/in_dummy_blocks.conf +17 -0
- data/example/in_dummy_with_compression.conf +23 -0
- data/example/in_forward.conf +7 -0
- data/example/in_forward_client.conf +37 -0
- data/example/in_forward_shared_key.conf +15 -0
- data/example/in_forward_tls.conf +14 -0
- data/example/in_forward_users.conf +24 -0
- data/example/in_forward_workers.conf +21 -0
- data/example/in_http.conf +3 -1
- data/example/in_out_forward.conf +17 -0
- data/example/logevents.conf +25 -0
- data/example/multi_filters.conf +61 -0
- data/example/out_exec_filter.conf +42 -0
- data/example/out_forward.conf +13 -13
- data/example/out_forward_buf_file.conf +23 -0
- data/example/out_forward_client.conf +109 -0
- data/example/out_forward_heartbeat_none.conf +16 -0
- data/example/out_forward_shared_key.conf +36 -0
- data/example/out_forward_tls.conf +18 -0
- data/example/out_forward_users.conf +65 -0
- data/example/out_null.conf +36 -0
- data/example/secondary_file.conf +42 -0
- data/example/suppress_config_dump.conf +7 -0
- data/example/worker_section.conf +36 -0
- data/fluent.conf +29 -0
- data/fluentd.gemspec +21 -11
- data/lib/fluent/agent.rb +67 -90
- data/lib/fluent/clock.rb +62 -0
- data/lib/fluent/command/binlog_reader.rb +244 -0
- data/lib/fluent/command/ca_generate.rb +181 -0
- data/lib/fluent/command/cat.rb +42 -18
- data/lib/fluent/command/debug.rb +12 -10
- data/lib/fluent/command/fluentd.rb +153 -5
- data/lib/fluent/command/plugin_config_formatter.rb +292 -0
- data/lib/fluent/command/plugin_generator.rb +324 -0
- data/lib/fluent/compat/call_super_mixin.rb +67 -0
- data/lib/fluent/compat/detach_process_mixin.rb +33 -0
- data/lib/fluent/compat/exec_util.rb +129 -0
- data/lib/fluent/compat/file_util.rb +54 -0
- data/lib/fluent/compat/filter.rb +68 -0
- data/lib/fluent/compat/formatter.rb +111 -0
- data/lib/fluent/compat/formatter_utils.rb +85 -0
- data/lib/fluent/compat/handle_tag_and_time_mixin.rb +62 -0
- data/lib/fluent/compat/handle_tag_name_mixin.rb +53 -0
- data/lib/fluent/compat/input.rb +49 -0
- data/lib/fluent/compat/output.rb +718 -0
- data/lib/fluent/compat/output_chain.rb +60 -0
- data/lib/fluent/compat/parser.rb +310 -0
- data/lib/fluent/compat/parser_utils.rb +40 -0
- data/lib/fluent/compat/propagate_default.rb +62 -0
- data/lib/fluent/compat/record_filter_mixin.rb +34 -0
- data/lib/fluent/compat/set_tag_key_mixin.rb +50 -0
- data/lib/fluent/compat/set_time_key_mixin.rb +69 -0
- data/lib/fluent/compat/socket_util.rb +165 -0
- data/lib/fluent/compat/string_util.rb +34 -0
- data/lib/fluent/compat/structured_format_mixin.rb +26 -0
- data/lib/fluent/compat/type_converter.rb +90 -0
- data/lib/fluent/config/configure_proxy.rb +210 -62
- data/lib/fluent/config/dsl.rb +12 -5
- data/lib/fluent/config/element.rb +107 -9
- data/lib/fluent/config/literal_parser.rb +9 -3
- data/lib/fluent/config/parser.rb +4 -4
- data/lib/fluent/config/section.rb +51 -14
- data/lib/fluent/config/types.rb +28 -13
- data/lib/fluent/config/v1_parser.rb +3 -5
- data/lib/fluent/config.rb +23 -20
- data/lib/fluent/configurable.rb +79 -21
- data/lib/fluent/counter/base_socket.rb +46 -0
- data/lib/fluent/counter/client.rb +297 -0
- data/lib/fluent/counter/error.rb +86 -0
- data/lib/fluent/counter/mutex_hash.rb +163 -0
- data/lib/fluent/counter/server.rb +273 -0
- data/lib/fluent/counter/store.rb +205 -0
- data/lib/fluent/counter/validator.rb +145 -0
- data/lib/fluent/counter.rb +23 -0
- data/lib/fluent/daemon.rb +15 -0
- data/lib/fluent/engine.rb +102 -65
- data/lib/fluent/env.rb +7 -3
- data/lib/fluent/error.rb +30 -0
- data/lib/fluent/event.rb +197 -21
- data/lib/fluent/event_router.rb +93 -10
- data/lib/fluent/filter.rb +2 -50
- data/lib/fluent/formatter.rb +4 -293
- data/lib/fluent/input.rb +2 -32
- data/lib/fluent/label.rb +10 -2
- data/lib/fluent/load.rb +3 -3
- data/lib/fluent/log.rb +348 -81
- data/lib/fluent/match.rb +37 -36
- data/lib/fluent/mixin.rb +12 -176
- data/lib/fluent/msgpack_factory.rb +62 -0
- data/lib/fluent/output.rb +10 -612
- data/lib/fluent/output_chain.rb +23 -0
- data/lib/fluent/parser.rb +4 -800
- data/lib/fluent/plugin/bare_output.rb +63 -0
- data/lib/fluent/plugin/base.rb +192 -0
- data/lib/fluent/plugin/buf_file.rb +128 -174
- data/lib/fluent/plugin/buf_memory.rb +9 -92
- data/lib/fluent/plugin/buffer/chunk.rb +221 -0
- data/lib/fluent/plugin/buffer/file_chunk.rb +383 -0
- data/lib/fluent/plugin/buffer/memory_chunk.rb +90 -0
- data/lib/fluent/plugin/buffer.rb +779 -0
- data/lib/fluent/plugin/compressable.rb +92 -0
- data/lib/fluent/plugin/exec_util.rb +3 -108
- data/lib/fluent/plugin/file_util.rb +4 -34
- data/lib/fluent/plugin/file_wrapper.rb +120 -0
- data/lib/fluent/plugin/filter.rb +93 -0
- data/lib/fluent/plugin/filter_grep.rb +117 -34
- data/lib/fluent/plugin/filter_parser.rb +85 -62
- data/lib/fluent/plugin/filter_record_transformer.rb +27 -39
- data/lib/fluent/plugin/filter_stdout.rb +15 -12
- data/lib/fluent/plugin/formatter.rb +50 -0
- data/lib/fluent/plugin/formatter_csv.rb +52 -0
- data/lib/fluent/plugin/formatter_hash.rb +33 -0
- data/lib/fluent/plugin/formatter_json.rb +55 -0
- data/lib/fluent/plugin/formatter_ltsv.rb +42 -0
- data/lib/fluent/plugin/formatter_msgpack.rb +33 -0
- data/lib/fluent/plugin/formatter_out_file.rb +51 -0
- data/lib/fluent/plugin/formatter_single_value.rb +34 -0
- data/lib/fluent/plugin/formatter_stdout.rb +76 -0
- data/lib/fluent/plugin/formatter_tsv.rb +38 -0
- data/lib/fluent/plugin/in_debug_agent.rb +17 -6
- data/lib/fluent/plugin/in_dummy.rb +47 -20
- data/lib/fluent/plugin/in_exec.rb +55 -123
- data/lib/fluent/plugin/in_forward.rb +299 -216
- data/lib/fluent/plugin/in_gc_stat.rb +14 -36
- data/lib/fluent/plugin/in_http.rb +204 -91
- data/lib/fluent/plugin/in_monitor_agent.rb +186 -258
- data/lib/fluent/plugin/in_object_space.rb +13 -41
- data/lib/fluent/plugin/in_syslog.rb +112 -134
- data/lib/fluent/plugin/in_tail.rb +408 -745
- data/lib/fluent/plugin/in_tcp.rb +66 -9
- data/lib/fluent/plugin/in_udp.rb +60 -11
- data/lib/fluent/plugin/{in_stream.rb → in_unix.rb} +8 -4
- data/lib/fluent/plugin/input.rb +37 -0
- data/lib/fluent/plugin/multi_output.rb +158 -0
- data/lib/fluent/plugin/out_copy.rb +23 -35
- data/lib/fluent/plugin/out_exec.rb +67 -70
- data/lib/fluent/plugin/out_exec_filter.rb +204 -271
- data/lib/fluent/plugin/out_file.rb +267 -73
- data/lib/fluent/plugin/out_forward.rb +854 -325
- data/lib/fluent/plugin/out_null.rb +42 -9
- data/lib/fluent/plugin/out_relabel.rb +9 -5
- data/lib/fluent/plugin/out_roundrobin.rb +18 -37
- data/lib/fluent/plugin/out_secondary_file.rb +133 -0
- data/lib/fluent/plugin/out_stdout.rb +43 -10
- data/lib/fluent/plugin/out_stream.rb +7 -2
- data/lib/fluent/plugin/output.rb +1498 -0
- data/lib/fluent/plugin/owned_by_mixin.rb +42 -0
- data/lib/fluent/plugin/parser.rb +191 -0
- data/lib/fluent/plugin/parser_apache.rb +28 -0
- data/lib/fluent/plugin/parser_apache2.rb +88 -0
- data/lib/fluent/plugin/parser_apache_error.rb +26 -0
- data/lib/fluent/plugin/parser_csv.rb +39 -0
- data/lib/fluent/plugin/parser_json.rb +94 -0
- data/lib/fluent/plugin/parser_ltsv.rb +49 -0
- data/lib/fluent/plugin/parser_msgpack.rb +50 -0
- data/lib/fluent/plugin/parser_multiline.rb +106 -0
- data/lib/fluent/plugin/parser_nginx.rb +28 -0
- data/lib/fluent/plugin/parser_none.rb +36 -0
- data/lib/fluent/plugin/parser_regexp.rb +68 -0
- data/lib/fluent/plugin/parser_syslog.rb +142 -0
- data/lib/fluent/plugin/parser_tsv.rb +42 -0
- data/lib/fluent/plugin/socket_util.rb +3 -143
- data/lib/fluent/plugin/storage.rb +84 -0
- data/lib/fluent/plugin/storage_local.rb +164 -0
- data/lib/fluent/plugin/string_util.rb +3 -15
- data/lib/fluent/plugin.rb +122 -121
- data/lib/fluent/plugin_helper/cert_option.rb +178 -0
- data/lib/fluent/plugin_helper/child_process.rb +364 -0
- data/lib/fluent/plugin_helper/compat_parameters.rb +333 -0
- data/lib/fluent/plugin_helper/counter.rb +51 -0
- data/lib/fluent/plugin_helper/event_emitter.rb +93 -0
- data/lib/fluent/plugin_helper/event_loop.rb +170 -0
- data/lib/fluent/plugin_helper/extract.rb +104 -0
- data/lib/fluent/plugin_helper/formatter.rb +147 -0
- data/lib/fluent/plugin_helper/http_server/app.rb +79 -0
- data/lib/fluent/plugin_helper/http_server/compat/server.rb +81 -0
- data/lib/fluent/plugin_helper/http_server/compat/webrick_handler.rb +58 -0
- data/lib/fluent/plugin_helper/http_server/methods.rb +35 -0
- data/lib/fluent/plugin_helper/http_server/request.rb +42 -0
- data/lib/fluent/plugin_helper/http_server/router.rb +54 -0
- data/lib/fluent/plugin_helper/http_server/server.rb +87 -0
- data/lib/fluent/plugin_helper/http_server.rb +76 -0
- data/lib/fluent/plugin_helper/inject.rb +151 -0
- data/lib/fluent/plugin_helper/parser.rb +147 -0
- data/lib/fluent/plugin_helper/record_accessor.rb +210 -0
- data/lib/fluent/plugin_helper/retry_state.rb +205 -0
- data/lib/fluent/plugin_helper/server.rb +807 -0
- data/lib/fluent/plugin_helper/socket.rb +250 -0
- data/lib/fluent/plugin_helper/socket_option.rb +80 -0
- data/lib/fluent/plugin_helper/storage.rb +349 -0
- data/lib/fluent/plugin_helper/thread.rb +179 -0
- data/lib/fluent/plugin_helper/timer.rb +92 -0
- data/lib/fluent/plugin_helper.rb +73 -0
- data/lib/fluent/plugin_id.rb +80 -0
- data/lib/fluent/process.rb +3 -489
- data/lib/fluent/registry.rb +52 -10
- data/lib/fluent/root_agent.rb +204 -42
- data/lib/fluent/supervisor.rb +597 -359
- data/lib/fluent/system_config.rb +131 -42
- data/lib/fluent/test/base.rb +6 -54
- data/lib/fluent/test/driver/base.rb +224 -0
- data/lib/fluent/test/driver/base_owned.rb +70 -0
- data/lib/fluent/test/driver/base_owner.rb +135 -0
- data/lib/fluent/test/driver/event_feeder.rb +98 -0
- data/lib/fluent/test/driver/filter.rb +57 -0
- data/lib/fluent/test/driver/formatter.rb +30 -0
- data/lib/fluent/test/driver/input.rb +31 -0
- data/lib/fluent/test/driver/multi_output.rb +53 -0
- data/lib/fluent/test/driver/output.rb +102 -0
- data/lib/fluent/test/driver/parser.rb +30 -0
- data/lib/fluent/test/driver/test_event_router.rb +45 -0
- data/lib/fluent/test/filter_test.rb +0 -1
- data/lib/fluent/test/formatter_test.rb +4 -1
- data/lib/fluent/test/helpers.rb +58 -10
- data/lib/fluent/test/input_test.rb +27 -19
- data/lib/fluent/test/log.rb +79 -0
- data/lib/fluent/test/output_test.rb +28 -39
- data/lib/fluent/test/parser_test.rb +3 -1
- data/lib/fluent/test/startup_shutdown.rb +46 -0
- data/lib/fluent/test.rb +33 -1
- data/lib/fluent/time.rb +450 -1
- data/lib/fluent/timezone.rb +27 -3
- data/lib/fluent/{status.rb → unique_id.rb} +15 -24
- data/lib/fluent/version.rb +1 -1
- data/lib/fluent/winsvc.rb +85 -0
- data/templates/new_gem/Gemfile +3 -0
- data/templates/new_gem/README.md.erb +43 -0
- data/templates/new_gem/Rakefile +13 -0
- data/templates/new_gem/fluent-plugin.gemspec.erb +27 -0
- data/templates/new_gem/lib/fluent/plugin/filter.rb.erb +14 -0
- data/templates/new_gem/lib/fluent/plugin/formatter.rb.erb +14 -0
- data/templates/new_gem/lib/fluent/plugin/input.rb.erb +11 -0
- data/templates/new_gem/lib/fluent/plugin/output.rb.erb +11 -0
- data/templates/new_gem/lib/fluent/plugin/parser.rb.erb +15 -0
- data/templates/new_gem/test/helper.rb.erb +8 -0
- data/templates/new_gem/test/plugin/test_filter.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_formatter.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_input.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_output.rb.erb +18 -0
- data/templates/new_gem/test/plugin/test_parser.rb.erb +18 -0
- data/templates/plugin_config_formatter/param.md-compact.erb +25 -0
- data/templates/plugin_config_formatter/param.md.erb +34 -0
- data/templates/plugin_config_formatter/section.md.erb +12 -0
- data/test/command/test_binlog_reader.rb +346 -0
- data/test/command/test_ca_generate.rb +70 -0
- data/test/command/test_fluentd.rb +901 -0
- data/test/command/test_plugin_config_formatter.rb +276 -0
- data/test/command/test_plugin_generator.rb +92 -0
- data/test/compat/test_calls_super.rb +166 -0
- data/test/compat/test_parser.rb +92 -0
- data/test/config/test_config_parser.rb +126 -2
- data/test/config/test_configurable.rb +946 -187
- data/test/config/test_configure_proxy.rb +424 -74
- data/test/config/test_dsl.rb +11 -11
- data/test/config/test_element.rb +500 -0
- data/test/config/test_literal_parser.rb +8 -0
- data/test/config/test_plugin_configuration.rb +56 -0
- data/test/config/test_section.rb +79 -7
- data/test/config/test_system_config.rb +122 -35
- data/test/config/test_types.rb +38 -0
- data/test/counter/test_client.rb +559 -0
- data/test/counter/test_error.rb +44 -0
- data/test/counter/test_mutex_hash.rb +179 -0
- data/test/counter/test_server.rb +589 -0
- data/test/counter/test_store.rb +258 -0
- data/test/counter/test_validator.rb +137 -0
- data/test/helper.rb +89 -6
- data/test/helpers/fuzzy_assert.rb +89 -0
- data/test/plugin/test_bare_output.rb +118 -0
- data/test/plugin/test_base.rb +115 -0
- data/test/plugin/test_buf_file.rb +823 -460
- data/test/plugin/test_buf_memory.rb +32 -194
- data/test/plugin/test_buffer.rb +1233 -0
- data/test/plugin/test_buffer_chunk.rb +198 -0
- data/test/plugin/test_buffer_file_chunk.rb +844 -0
- data/test/plugin/test_buffer_memory_chunk.rb +338 -0
- data/test/plugin/test_compressable.rb +84 -0
- data/test/plugin/test_filter.rb +357 -0
- data/test/plugin/test_filter_grep.rb +540 -29
- data/test/plugin/test_filter_parser.rb +439 -452
- data/test/plugin/test_filter_record_transformer.rb +123 -166
- data/test/plugin/test_filter_stdout.rb +160 -72
- data/test/plugin/test_formatter_csv.rb +111 -0
- data/test/plugin/test_formatter_hash.rb +35 -0
- data/test/plugin/test_formatter_json.rb +51 -0
- data/test/plugin/test_formatter_ltsv.rb +62 -0
- data/test/plugin/test_formatter_msgpack.rb +28 -0
- data/test/plugin/test_formatter_out_file.rb +95 -0
- data/test/plugin/test_formatter_single_value.rb +38 -0
- data/test/plugin/test_formatter_tsv.rb +68 -0
- data/test/plugin/test_in_debug_agent.rb +24 -1
- data/test/plugin/test_in_dummy.rb +111 -18
- data/test/plugin/test_in_exec.rb +200 -113
- data/test/plugin/test_in_forward.rb +990 -387
- data/test/plugin/test_in_gc_stat.rb +10 -8
- data/test/plugin/test_in_http.rb +600 -224
- data/test/plugin/test_in_monitor_agent.rb +690 -0
- data/test/plugin/test_in_object_space.rb +24 -8
- data/test/plugin/test_in_syslog.rb +154 -215
- data/test/plugin/test_in_tail.rb +1006 -707
- data/test/plugin/test_in_tcp.rb +125 -48
- data/test/plugin/test_in_udp.rb +204 -63
- data/test/plugin/{test_in_stream.rb → test_in_unix.rb} +14 -13
- data/test/plugin/test_input.rb +126 -0
- data/test/plugin/test_metadata.rb +89 -0
- data/test/plugin/test_multi_output.rb +180 -0
- data/test/plugin/test_out_copy.rb +117 -112
- data/test/plugin/test_out_exec.rb +258 -53
- data/test/plugin/test_out_exec_filter.rb +538 -115
- data/test/plugin/test_out_file.rb +865 -178
- data/test/plugin/test_out_forward.rb +998 -210
- data/test/plugin/test_out_null.rb +105 -0
- data/test/plugin/test_out_relabel.rb +28 -0
- data/test/plugin/test_out_roundrobin.rb +36 -29
- data/test/plugin/test_out_secondary_file.rb +458 -0
- data/test/plugin/test_out_stdout.rb +135 -37
- data/test/plugin/test_out_stream.rb +18 -0
- data/test/plugin/test_output.rb +984 -0
- data/test/plugin/test_output_as_buffered.rb +2021 -0
- data/test/plugin/test_output_as_buffered_backup.rb +312 -0
- data/test/plugin/test_output_as_buffered_compress.rb +165 -0
- data/test/plugin/test_output_as_buffered_overflow.rb +250 -0
- data/test/plugin/test_output_as_buffered_retries.rb +911 -0
- data/test/plugin/test_output_as_buffered_secondary.rb +874 -0
- data/test/plugin/test_output_as_standard.rb +374 -0
- data/test/plugin/test_owned_by.rb +35 -0
- data/test/plugin/test_parser.rb +359 -0
- data/test/plugin/test_parser_apache.rb +42 -0
- data/test/plugin/test_parser_apache2.rb +47 -0
- data/test/plugin/test_parser_apache_error.rb +45 -0
- data/test/plugin/test_parser_csv.rb +103 -0
- data/test/plugin/test_parser_json.rb +138 -0
- data/test/plugin/test_parser_labeled_tsv.rb +145 -0
- data/test/plugin/test_parser_multiline.rb +100 -0
- data/test/plugin/test_parser_nginx.rb +88 -0
- data/test/plugin/test_parser_none.rb +52 -0
- data/test/plugin/test_parser_regexp.rb +289 -0
- data/test/plugin/test_parser_syslog.rb +441 -0
- data/test/plugin/test_parser_tsv.rb +122 -0
- data/test/plugin/test_storage.rb +167 -0
- data/test/plugin/test_storage_local.rb +335 -0
- data/test/plugin_helper/data/cert/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/cert-with-no-newline.pem +19 -0
- data/test/plugin_helper/data/cert/cert.pem +19 -0
- data/test/plugin_helper/http_server/test_app.rb +65 -0
- data/test/plugin_helper/http_server/test_route.rb +32 -0
- data/test/plugin_helper/test_cert_option.rb +16 -0
- data/test/plugin_helper/test_child_process.rb +794 -0
- data/test/plugin_helper/test_compat_parameters.rb +353 -0
- data/test/plugin_helper/test_event_emitter.rb +51 -0
- data/test/plugin_helper/test_event_loop.rb +52 -0
- data/test/plugin_helper/test_extract.rb +194 -0
- data/test/plugin_helper/test_formatter.rb +255 -0
- data/test/plugin_helper/test_http_server_helper.rb +205 -0
- data/test/plugin_helper/test_inject.rb +519 -0
- data/test/plugin_helper/test_parser.rb +264 -0
- data/test/plugin_helper/test_record_accessor.rb +197 -0
- data/test/plugin_helper/test_retry_state.rb +442 -0
- data/test/plugin_helper/test_server.rb +1714 -0
- data/test/plugin_helper/test_storage.rb +542 -0
- data/test/plugin_helper/test_thread.rb +164 -0
- data/test/plugin_helper/test_timer.rb +132 -0
- data/test/scripts/exec_script.rb +0 -6
- data/test/scripts/fluent/plugin/formatter1/formatter_test1.rb +7 -0
- data/test/scripts/fluent/plugin/formatter2/formatter_test2.rb +7 -0
- data/test/scripts/fluent/plugin/out_test.rb +23 -15
- data/test/scripts/fluent/plugin/out_test2.rb +80 -0
- data/test/test_clock.rb +164 -0
- data/test/test_config.rb +16 -7
- data/test/test_configdsl.rb +2 -2
- data/test/test_event.rb +360 -13
- data/test/test_event_router.rb +108 -11
- data/test/test_event_time.rb +199 -0
- data/test/test_filter.rb +48 -6
- data/test/test_formatter.rb +11 -391
- data/test/test_input.rb +1 -1
- data/test/test_log.rb +591 -31
- data/test/test_mixin.rb +1 -1
- data/test/test_output.rb +121 -185
- data/test/test_plugin.rb +251 -0
- data/test/test_plugin_classes.rb +177 -10
- data/test/test_plugin_helper.rb +81 -0
- data/test/test_plugin_id.rb +101 -0
- data/test/test_process.rb +8 -42
- data/test/test_root_agent.rb +766 -21
- data/test/test_supervisor.rb +481 -0
- data/test/test_test_drivers.rb +135 -0
- data/test/test_time_formatter.rb +282 -0
- data/test/test_time_parser.rb +231 -0
- data/test/test_unique_id.rb +47 -0
- metadata +454 -60
- data/COPYING +0 -14
- data/ChangeLog +0 -666
- data/lib/fluent/buffer.rb +0 -365
- data/lib/fluent/plugin/in_status.rb +0 -76
- data/test/plugin/test_in_status.rb +0 -38
- data/test/test_buffer.rb +0 -624
- data/test/test_parser.rb +0 -1305
data/lib/fluent/log.rb
CHANGED
@@ -15,6 +15,7 @@
|
|
15
15
|
#
|
16
16
|
|
17
17
|
require 'forwardable'
|
18
|
+
require 'logger'
|
18
19
|
|
19
20
|
module Fluent
|
20
21
|
class Log
|
@@ -41,6 +42,14 @@ module Fluent
|
|
41
42
|
|
42
43
|
LEVEL_TEXT = %w(trace debug info warn error fatal)
|
43
44
|
|
45
|
+
LOG_EVENT_TAG_PREFIX = 'fluent'
|
46
|
+
LOG_EVENT_LABEL = '@FLUENT_LOG'
|
47
|
+
LOG_TYPE_SUPERVISOR = :supervisor # only in supervisor, or a worker with --no-supervisor
|
48
|
+
LOG_TYPE_WORKER0 = :worker0 # only in a worker with worker_id=0 (without showing worker id)
|
49
|
+
LOG_TYPE_DEFAULT = :default # show logs in all supervisor/workers, with worker id in workers (default)
|
50
|
+
|
51
|
+
LOG_TYPES = [LOG_TYPE_SUPERVISOR, LOG_TYPE_WORKER0, LOG_TYPE_DEFAULT].freeze
|
52
|
+
|
44
53
|
def self.str_to_level(log_level_str)
|
45
54
|
case log_level_str.downcase
|
46
55
|
when "trace" then LEVEL_TRACE
|
@@ -53,30 +62,146 @@ module Fluent
|
|
53
62
|
end
|
54
63
|
end
|
55
64
|
|
56
|
-
def
|
57
|
-
|
58
|
-
|
65
|
+
def self.event_tags
|
66
|
+
LEVEL_TEXT.map{|t| "#{LOG_EVENT_TAG_PREFIX}.#{t}" }
|
67
|
+
end
|
68
|
+
|
69
|
+
def initialize(logger, opts={})
|
70
|
+
# overwrites logger.level= so that config reloading resets level of Fluentd::Log
|
71
|
+
orig_logger_level_setter = logger.class.public_instance_method(:level=).bind(logger)
|
72
|
+
me = self
|
73
|
+
# The original ruby logger sets the number as each log level like below.
|
74
|
+
# DEBUG = 0
|
75
|
+
# INFO = 1
|
76
|
+
# WARN = 2
|
77
|
+
# ERROR = 3
|
78
|
+
# FATAL = 4
|
79
|
+
# Serverengine use this original log number. In addition to this, serverengine sets -1 as TRACE level.
|
80
|
+
# TRACE = -1
|
81
|
+
#
|
82
|
+
# On the other hand, in fluentd side, it sets the number like below.
|
83
|
+
# TRACE = 0
|
84
|
+
# DEBUG = 1
|
85
|
+
# INFO = 2
|
86
|
+
# WARN = 3
|
87
|
+
# ERROR = 4
|
88
|
+
# FATAL = 5
|
89
|
+
#
|
90
|
+
# Then fluentd's level is set as serverengine's level + 1.
|
91
|
+
# So if serverengine's logger level is changed, fluentd's log level will be changed to that + 1.
|
92
|
+
logger.define_singleton_method(:level=) {|level| orig_logger_level_setter.call(level); me.level = self.level + 1 }
|
93
|
+
|
94
|
+
@logger = logger
|
95
|
+
@out = logger.instance_variable_get(:@logdev)
|
96
|
+
@level = logger.level + 1
|
59
97
|
@debug_mode = false
|
60
|
-
@
|
61
|
-
@tag = 'fluent'
|
62
|
-
@time_format = '%Y-%m-%d %H:%M:%S %z '
|
98
|
+
@log_event_enabled = false
|
63
99
|
@depth_offset = 1
|
100
|
+
@format = nil
|
101
|
+
@time_format = nil
|
102
|
+
@formatter = nil
|
103
|
+
|
104
|
+
self.format = :text
|
64
105
|
enable_color out.tty?
|
65
106
|
# TODO: This variable name is unclear so we should change to better name.
|
66
107
|
@threads_exclude_events = []
|
67
108
|
|
68
109
|
# Fluent::Engine requires Fluent::Log, so we must take that object lazily
|
69
110
|
@engine = Fluent.const_get('Engine')
|
70
|
-
|
71
|
-
|
72
|
-
|
111
|
+
@optional_header = nil
|
112
|
+
@optional_attrs = nil
|
113
|
+
|
114
|
+
@suppress_repeated_stacktrace = opts[:suppress_repeated_stacktrace]
|
115
|
+
|
116
|
+
@process_type = opts[:process_type] # :supervisor, :worker0, :workers Or :standalone
|
117
|
+
@process_type ||= :standalone # to keep behavior of existing code
|
118
|
+
case @process_type
|
119
|
+
when :supervisor
|
120
|
+
@show_supervisor_log = true
|
121
|
+
@show_worker0_log = false
|
122
|
+
when :worker0
|
123
|
+
@show_supervisor_log = false
|
124
|
+
@show_worker0_log = true
|
125
|
+
when :workers
|
126
|
+
@show_supervisor_log = false
|
127
|
+
@show_worker0_log = false
|
128
|
+
when :standalone
|
129
|
+
@show_supervisor_log = true
|
130
|
+
@show_worker0_log = true
|
131
|
+
else
|
132
|
+
raise "BUG: unknown process type for logger:#{@process_type}"
|
73
133
|
end
|
134
|
+
@worker_id = opts[:worker_id]
|
135
|
+
@worker_id_part = "##{@worker_id} " # used only for :default log type in workers
|
74
136
|
end
|
75
137
|
|
138
|
+
def dup
|
139
|
+
dl_opts = {}
|
140
|
+
dl_opts[:log_level] = @level - 1
|
141
|
+
logger = ServerEngine::DaemonLogger.new(@out, dl_opts)
|
142
|
+
clone = self.class.new(logger, suppress_repeated_stacktrace: @suppress_repeated_stacktrace, process_type: @process_type, worker_id: @worker_id)
|
143
|
+
clone.format = @format
|
144
|
+
clone.time_format = @time_format
|
145
|
+
clone.log_event_enabled = @log_event_enabled
|
146
|
+
# optional headers/attrs are not copied, because new PluginLogger should have another one of it
|
147
|
+
clone
|
148
|
+
end
|
149
|
+
|
150
|
+
attr_reader :format
|
151
|
+
attr_reader :time_format
|
152
|
+
attr_accessor :log_event_enabled
|
76
153
|
attr_accessor :out
|
77
154
|
attr_accessor :level
|
78
|
-
attr_accessor :
|
79
|
-
|
155
|
+
attr_accessor :optional_header, :optional_attrs
|
156
|
+
|
157
|
+
def logdev=(logdev)
|
158
|
+
@out = logdev
|
159
|
+
@logger.instance_variable_set(:@logdev, logdev)
|
160
|
+
nil
|
161
|
+
end
|
162
|
+
|
163
|
+
def format=(fmt)
|
164
|
+
return if @format == fmt
|
165
|
+
|
166
|
+
@time_format = '%Y-%m-%d %H:%M:%S %z'
|
167
|
+
@time_formatter = Strftime.new(@time_format) rescue nil
|
168
|
+
|
169
|
+
case fmt
|
170
|
+
when :text
|
171
|
+
@format = :text
|
172
|
+
@formatter = Proc.new { |type, time, level, msg|
|
173
|
+
r = caller_line(type, time, @depth_offset, level)
|
174
|
+
r << msg
|
175
|
+
r
|
176
|
+
}
|
177
|
+
when :json
|
178
|
+
@format = :json
|
179
|
+
@formatter = Proc.new { |type, time, level, msg|
|
180
|
+
r = {
|
181
|
+
'time' => format_time(time),
|
182
|
+
'level' => LEVEL_TEXT[level],
|
183
|
+
'message' => msg
|
184
|
+
}
|
185
|
+
if wid = get_worker_id(type)
|
186
|
+
r['worker_id'] = wid
|
187
|
+
end
|
188
|
+
Yajl.dump(r)
|
189
|
+
}
|
190
|
+
end
|
191
|
+
|
192
|
+
nil
|
193
|
+
end
|
194
|
+
|
195
|
+
def time_format=(time_fmt)
|
196
|
+
@time_format = time_fmt
|
197
|
+
@time_formatter = Strftime.new(@time_format) rescue nil
|
198
|
+
end
|
199
|
+
|
200
|
+
def reopen!
|
201
|
+
# do nothing in @logger.reopen! because it's already reopened in Supervisor.load_config
|
202
|
+
@logger.reopen! if @logger
|
203
|
+
nil
|
204
|
+
end
|
80
205
|
|
81
206
|
def enable_debug(b=true)
|
82
207
|
@debug_mode = b
|
@@ -84,10 +209,17 @@ module Fluent
|
|
84
209
|
end
|
85
210
|
|
86
211
|
def enable_event(b=true)
|
87
|
-
@
|
212
|
+
@log_event_enabled = b
|
88
213
|
self
|
89
214
|
end
|
90
215
|
|
216
|
+
# If you want to suppress event emitting in specific thread, please use this method.
|
217
|
+
# Events in passed thread are never emitted.
|
218
|
+
def disable_events(thread)
|
219
|
+
# this method is not symmetric with #enable_event.
|
220
|
+
@threads_exclude_events.push(thread) unless @threads_exclude_events.include?(thread)
|
221
|
+
end
|
222
|
+
|
91
223
|
def enable_color?
|
92
224
|
!@color_reset.empty?
|
93
225
|
end
|
@@ -113,123 +245,151 @@ module Fluent
|
|
113
245
|
self
|
114
246
|
end
|
115
247
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
248
|
+
def log_type(args)
|
249
|
+
if LOG_TYPES.include?(args.first)
|
250
|
+
args.shift
|
251
|
+
else
|
252
|
+
LOG_TYPE_DEFAULT
|
253
|
+
end
|
120
254
|
end
|
121
255
|
|
122
|
-
|
256
|
+
# TODO: skip :worker0 logs when Fluentd gracefully restarted
|
257
|
+
def skipped_type?(type)
|
258
|
+
case type
|
259
|
+
when LOG_TYPE_DEFAULT
|
260
|
+
false
|
261
|
+
when LOG_TYPE_WORKER0
|
262
|
+
!@show_worker0_log
|
263
|
+
when LOG_TYPE_SUPERVISOR
|
264
|
+
!@show_supervisor_log
|
265
|
+
else
|
266
|
+
raise "BUG: unknown log type:#{type}"
|
267
|
+
end
|
268
|
+
end
|
269
|
+
|
270
|
+
def on_trace
|
123
271
|
return if @level > LEVEL_TRACE
|
124
|
-
|
272
|
+
yield
|
125
273
|
end
|
126
274
|
|
127
275
|
def trace(*args, &block)
|
128
276
|
return if @level > LEVEL_TRACE
|
277
|
+
type = log_type(args)
|
278
|
+
return if skipped_type?(type)
|
129
279
|
args << block.call if block
|
130
280
|
time, msg = event(:trace, args)
|
131
|
-
puts [@color_trace,
|
281
|
+
puts [@color_trace, @formatter.call(type, time, LEVEL_TRACE, msg), @color_reset].join
|
132
282
|
rescue
|
133
283
|
# logger should not raise an exception. This rescue prevents unexpected behaviour.
|
134
284
|
end
|
135
285
|
alias TRACE trace
|
136
286
|
|
137
|
-
def trace_backtrace(backtrace=$!.backtrace)
|
138
|
-
dump_stacktrace(backtrace, LEVEL_TRACE)
|
287
|
+
def trace_backtrace(backtrace=$!.backtrace, type: :default)
|
288
|
+
dump_stacktrace(type, backtrace, LEVEL_TRACE)
|
139
289
|
end
|
140
290
|
|
141
|
-
def on_debug
|
291
|
+
def on_debug
|
142
292
|
return if @level > LEVEL_DEBUG
|
143
|
-
|
293
|
+
yield
|
144
294
|
end
|
145
295
|
|
146
296
|
def debug(*args, &block)
|
147
297
|
return if @level > LEVEL_DEBUG
|
298
|
+
type = log_type(args)
|
299
|
+
return if skipped_type?(type)
|
148
300
|
args << block.call if block
|
149
301
|
time, msg = event(:debug, args)
|
150
|
-
puts [@color_debug,
|
302
|
+
puts [@color_debug, @formatter.call(type, time, LEVEL_DEBUG, msg), @color_reset].join
|
151
303
|
rescue
|
152
304
|
end
|
153
305
|
alias DEBUG debug
|
154
306
|
|
155
|
-
def debug_backtrace(backtrace=$!.backtrace)
|
156
|
-
dump_stacktrace(backtrace, LEVEL_DEBUG)
|
307
|
+
def debug_backtrace(backtrace=$!.backtrace, type: :default)
|
308
|
+
dump_stacktrace(type, backtrace, LEVEL_DEBUG)
|
157
309
|
end
|
158
310
|
|
159
|
-
def on_info
|
311
|
+
def on_info
|
160
312
|
return if @level > LEVEL_INFO
|
161
|
-
|
313
|
+
yield
|
162
314
|
end
|
163
315
|
|
164
316
|
def info(*args, &block)
|
165
317
|
return if @level > LEVEL_INFO
|
318
|
+
type = log_type(args)
|
319
|
+
return if skipped_type?(type)
|
166
320
|
args << block.call if block
|
167
321
|
time, msg = event(:info, args)
|
168
|
-
puts [@color_info,
|
322
|
+
puts [@color_info, @formatter.call(type, time, LEVEL_INFO, msg), @color_reset].join
|
169
323
|
rescue
|
170
324
|
end
|
171
325
|
alias INFO info
|
172
326
|
|
173
|
-
def info_backtrace(backtrace=$!.backtrace)
|
174
|
-
dump_stacktrace(backtrace, LEVEL_INFO)
|
327
|
+
def info_backtrace(backtrace=$!.backtrace, type: :default)
|
328
|
+
dump_stacktrace(type, backtrace, LEVEL_INFO)
|
175
329
|
end
|
176
330
|
|
177
|
-
def on_warn
|
331
|
+
def on_warn
|
178
332
|
return if @level > LEVEL_WARN
|
179
|
-
|
333
|
+
yield
|
180
334
|
end
|
181
335
|
|
182
336
|
def warn(*args, &block)
|
183
337
|
return if @level > LEVEL_WARN
|
338
|
+
type = log_type(args)
|
339
|
+
return if skipped_type?(type)
|
184
340
|
args << block.call if block
|
185
341
|
time, msg = event(:warn, args)
|
186
|
-
puts [@color_warn,
|
342
|
+
puts [@color_warn, @formatter.call(type, time, LEVEL_WARN, msg), @color_reset].join
|
187
343
|
rescue
|
188
344
|
end
|
189
345
|
alias WARN warn
|
190
346
|
|
191
|
-
def warn_backtrace(backtrace=$!.backtrace)
|
192
|
-
dump_stacktrace(backtrace, LEVEL_WARN)
|
347
|
+
def warn_backtrace(backtrace=$!.backtrace, type: :default)
|
348
|
+
dump_stacktrace(type, backtrace, LEVEL_WARN)
|
193
349
|
end
|
194
350
|
|
195
|
-
def on_error
|
351
|
+
def on_error
|
196
352
|
return if @level > LEVEL_ERROR
|
197
|
-
|
353
|
+
yield
|
198
354
|
end
|
199
355
|
|
200
356
|
def error(*args, &block)
|
201
357
|
return if @level > LEVEL_ERROR
|
358
|
+
type = log_type(args)
|
359
|
+
return if skipped_type?(type)
|
202
360
|
args << block.call if block
|
203
361
|
time, msg = event(:error, args)
|
204
|
-
puts [@color_error,
|
362
|
+
puts [@color_error, @formatter.call(type, time, LEVEL_ERROR, msg), @color_reset].join
|
205
363
|
rescue
|
206
364
|
end
|
207
365
|
alias ERROR error
|
208
366
|
|
209
|
-
def error_backtrace(backtrace=$!.backtrace)
|
210
|
-
dump_stacktrace(backtrace, LEVEL_ERROR)
|
367
|
+
def error_backtrace(backtrace=$!.backtrace, type: :default)
|
368
|
+
dump_stacktrace(type, backtrace, LEVEL_ERROR)
|
211
369
|
end
|
212
370
|
|
213
|
-
def on_fatal
|
371
|
+
def on_fatal
|
214
372
|
return if @level > LEVEL_FATAL
|
215
|
-
|
373
|
+
yield
|
216
374
|
end
|
217
375
|
|
218
376
|
def fatal(*args, &block)
|
219
377
|
return if @level > LEVEL_FATAL
|
378
|
+
type = log_type(args)
|
379
|
+
return if skipped_type?(type)
|
220
380
|
args << block.call if block
|
221
381
|
time, msg = event(:fatal, args)
|
222
|
-
puts [@color_fatal,
|
382
|
+
puts [@color_fatal, @formatter.call(type, time, LEVEL_FATAL, msg), @color_reset].join
|
223
383
|
rescue
|
224
384
|
end
|
225
385
|
alias FATAL fatal
|
226
386
|
|
227
|
-
def fatal_backtrace(backtrace=$!.backtrace)
|
228
|
-
dump_stacktrace(backtrace, LEVEL_FATAL)
|
387
|
+
def fatal_backtrace(backtrace=$!.backtrace, type: :default)
|
388
|
+
dump_stacktrace(type, backtrace, LEVEL_FATAL)
|
229
389
|
end
|
230
390
|
|
231
391
|
def puts(msg)
|
232
|
-
@
|
392
|
+
@logger << msg + "\n"
|
233
393
|
@out.flush
|
234
394
|
msg
|
235
395
|
rescue
|
@@ -248,10 +408,59 @@ module Fluent
|
|
248
408
|
@out.flush
|
249
409
|
end
|
250
410
|
|
411
|
+
def reset
|
412
|
+
@out.reset if @out.respond_to?(:reset)
|
413
|
+
end
|
414
|
+
|
415
|
+
def dump_stacktrace(type, backtrace, level)
|
416
|
+
return if @level > level
|
417
|
+
|
418
|
+
time = Time.now
|
419
|
+
|
420
|
+
if @format == :text
|
421
|
+
line = caller_line(type, time, 5, level)
|
422
|
+
if @suppress_repeated_stacktrace && (Thread.current[:last_repeated_stacktrace] == backtrace)
|
423
|
+
puts [" ", line, 'suppressed same stacktrace'].join
|
424
|
+
else
|
425
|
+
backtrace.each { |msg|
|
426
|
+
puts [" ", line, msg].join
|
427
|
+
}
|
428
|
+
Thread.current[:last_repeated_stacktrace] = backtrace if @suppress_repeated_stacktrace
|
429
|
+
end
|
430
|
+
else
|
431
|
+
r = {
|
432
|
+
'time' => format_time(time),
|
433
|
+
'level' => LEVEL_TEXT[level],
|
434
|
+
}
|
435
|
+
if wid = get_worker_id(type)
|
436
|
+
r['worker_id'] = wid
|
437
|
+
end
|
438
|
+
|
439
|
+
if @suppress_repeated_stacktrace && (Thread.current[:last_repeated_stacktrace] == backtrace)
|
440
|
+
r['message'] = 'suppressed same stacktrace'
|
441
|
+
else
|
442
|
+
r['message'] = backtrace.join("\n")
|
443
|
+
Thread.current[:last_repeated_stacktrace] = backtrace if @suppress_repeated_stacktrace
|
444
|
+
end
|
445
|
+
|
446
|
+
puts Yajl.dump(r)
|
447
|
+
end
|
448
|
+
|
449
|
+
nil
|
450
|
+
end
|
451
|
+
|
452
|
+
def get_worker_id(type)
|
453
|
+
if type == :default && (@process_type == :worker0 || @process_type == :workers)
|
454
|
+
@worker_id
|
455
|
+
else
|
456
|
+
nil
|
457
|
+
end
|
458
|
+
end
|
459
|
+
|
251
460
|
def event(level, args)
|
252
461
|
time = Time.now
|
253
|
-
message = ''
|
254
|
-
map = {}
|
462
|
+
message = @optional_header ? @optional_header.dup : ''
|
463
|
+
map = @optional_attrs ? @optional_attrs.dup : {}
|
255
464
|
args.each {|a|
|
256
465
|
if a.is_a?(Hash)
|
257
466
|
a.each_pair {|k,v|
|
@@ -263,23 +472,32 @@ module Fluent
|
|
263
472
|
}
|
264
473
|
|
265
474
|
map.each_pair {|k,v|
|
266
|
-
|
475
|
+
if k == "error".freeze && v.is_a?(Exception) && !map.has_key?("error_class")
|
476
|
+
message << " error_class=#{v.class.to_s} error=#{v.to_s.inspect}"
|
477
|
+
else
|
478
|
+
message << " #{k}=#{v.inspect}"
|
479
|
+
end
|
267
480
|
}
|
268
481
|
|
269
|
-
|
482
|
+
if @log_event_enabled && !@threads_exclude_events.include?(Thread.current)
|
270
483
|
record = map.dup
|
271
484
|
record.keys.each {|key|
|
272
485
|
record[key] = record[key].inspect unless record[key].respond_to?(:to_msgpack)
|
273
486
|
}
|
274
487
|
record['message'] = message.dup
|
275
|
-
@engine.push_log_event("#{
|
488
|
+
@engine.push_log_event("#{LOG_EVENT_TAG_PREFIX}.#{level}", Fluent::EventTime.from_time(time), record)
|
276
489
|
end
|
277
490
|
|
278
491
|
return time, message
|
279
492
|
end
|
280
493
|
|
281
|
-
def caller_line(time, depth, level)
|
282
|
-
|
494
|
+
def caller_line(type, time, depth, level)
|
495
|
+
worker_id_part = if type == :default && (@process_type == :worker0 || @process_type == :workers)
|
496
|
+
@worker_id_part
|
497
|
+
else
|
498
|
+
"".freeze
|
499
|
+
end
|
500
|
+
log_msg = "#{format_time(time)} [#{LEVEL_TEXT[level]}]: #{worker_id_part}"
|
283
501
|
if @debug_mode
|
284
502
|
line = caller(depth+1)[0]
|
285
503
|
if match = /^(.+?):(\d+)(?::in `(.*)')?/.match(line)
|
@@ -292,23 +510,8 @@ module Fluent
|
|
292
510
|
return log_msg
|
293
511
|
end
|
294
512
|
|
295
|
-
|
296
|
-
|
297
|
-
def dump_stacktrace(backtrace, level)
|
298
|
-
return if @level > level
|
299
|
-
|
300
|
-
time = Time.now
|
301
|
-
line = caller_line(time, 5, level)
|
302
|
-
if @suppress_repeated_stacktrace && (Thread.current[:last_repeated_stacktrace] == backtrace)
|
303
|
-
puts [" ", line, 'suppressed same stacktrace'].join
|
304
|
-
else
|
305
|
-
backtrace.each { |msg|
|
306
|
-
puts [" ", line, msg].join
|
307
|
-
}
|
308
|
-
Thread.current[:last_repeated_stacktrace] = backtrace if @suppress_repeated_stacktrace
|
309
|
-
end
|
310
|
-
|
311
|
-
nil
|
513
|
+
def format_time(time)
|
514
|
+
@time_formatter ? @time_formatter.exec(time) : time.strftime(@time_format)
|
312
515
|
end
|
313
516
|
end
|
314
517
|
|
@@ -317,14 +520,19 @@ module Fluent
|
|
317
520
|
# This class enables log_level option in each plugin.
|
318
521
|
#
|
319
522
|
# PluginLogger has same functionality as Log but some methods are forwarded to internal logger
|
320
|
-
# for keeping logging action consistency in the process, e.g. color,
|
523
|
+
# for keeping logging action consistency in the process, e.g. color, event, etc.
|
321
524
|
class PluginLogger < Log
|
322
525
|
def initialize(logger)
|
323
526
|
@logger = logger
|
324
527
|
@level = @logger.level
|
528
|
+
@format = nil
|
325
529
|
@depth_offset = 2
|
326
|
-
|
530
|
+
if logger.instance_variable_defined?(:@suppress_repeated_stacktrace)
|
531
|
+
@suppress_repeated_stacktrace = logger.instance_variable_get(:@suppress_repeated_stacktrace)
|
532
|
+
end
|
327
533
|
|
534
|
+
self.format = @logger.format
|
535
|
+
self.time_format = @logger.time_format
|
328
536
|
enable_color @logger.enable_color?
|
329
537
|
end
|
330
538
|
|
@@ -332,17 +540,30 @@ module Fluent
|
|
332
540
|
@level = Log.str_to_level(log_level_str)
|
333
541
|
end
|
334
542
|
|
543
|
+
alias orig_format= format=
|
544
|
+
alias orig_time_format= time_format=
|
335
545
|
alias orig_enable_color enable_color
|
336
546
|
|
547
|
+
def format=(fmt)
|
548
|
+
self.orig_format = fmt
|
549
|
+
@logger.format = fmt
|
550
|
+
end
|
551
|
+
|
552
|
+
def time_format=(fmt)
|
553
|
+
self.orig_time_format = fmt
|
554
|
+
@logger.time_format = fmt
|
555
|
+
end
|
556
|
+
|
337
557
|
def enable_color(b = true)
|
338
558
|
orig_enable_color b
|
339
559
|
@logger.enable_color b
|
340
560
|
end
|
341
561
|
|
342
562
|
extend Forwardable
|
343
|
-
def_delegators '@logger', :enable_color?, :enable_debug, :enable_event,
|
344
|
-
:disable_events, :
|
345
|
-
:
|
563
|
+
def_delegators '@logger', :get_worker_id, :enable_color?, :enable_debug, :enable_event,
|
564
|
+
:disable_events, :log_event_enabled, :log_event_enabled=, :event, :caller_line, :puts, :write,
|
565
|
+
:<<, :flush, :reset, :out, :out=, :optional_header, :optional_header=, :optional_attrs,
|
566
|
+
:optional_attrs=
|
346
567
|
end
|
347
568
|
|
348
569
|
|
@@ -350,7 +571,7 @@ module Fluent
|
|
350
571
|
def self.included(klass)
|
351
572
|
klass.instance_eval {
|
352
573
|
desc 'Allows the user to set different levels of logging for each plugin.'
|
353
|
-
config_param
|
574
|
+
config_param :@log_level, :string, default: nil, alias: :log_level # 'log_level' will be warned as deprecated
|
354
575
|
}
|
355
576
|
end
|
356
577
|
|
@@ -365,12 +586,58 @@ module Fluent
|
|
365
586
|
def configure(conf)
|
366
587
|
super
|
367
588
|
|
368
|
-
if @log_level
|
369
|
-
unless @log.is_a?(PluginLogger)
|
370
|
-
|
589
|
+
if plugin_id_configured? || conf['@log_level']
|
590
|
+
@log = PluginLogger.new($log.dup) unless @log.is_a?(PluginLogger)
|
591
|
+
@log.optional_attrs = {}
|
592
|
+
|
593
|
+
if level = conf['@log_level']
|
594
|
+
@log.level = level
|
371
595
|
end
|
372
|
-
|
596
|
+
|
597
|
+
if plugin_id_configured?
|
598
|
+
@log.optional_header = "[#{@id}] "
|
599
|
+
end
|
600
|
+
end
|
601
|
+
end
|
602
|
+
|
603
|
+
def terminate
|
604
|
+
super
|
605
|
+
@log.reset
|
606
|
+
end
|
607
|
+
end
|
608
|
+
|
609
|
+
# This class delegetes some methods which are used in `Fluent::Logger` to a instance variable(`dev`) in `Logger::LogDevice` class
|
610
|
+
# https://github.com/ruby/ruby/blob/7b2d47132ff8ee950b0f978ab772dee868d9f1b0/lib/logger.rb#L661
|
611
|
+
class LogDeviceIO < ::Logger::LogDevice
|
612
|
+
def flush
|
613
|
+
if @dev.respond_to?(:flush)
|
614
|
+
@dev.flush
|
615
|
+
else
|
616
|
+
super
|
617
|
+
end
|
618
|
+
end
|
619
|
+
|
620
|
+
def tty?
|
621
|
+
if @dev.respond_to?(:tty?)
|
622
|
+
@dev.tty?
|
623
|
+
else
|
624
|
+
super
|
625
|
+
end
|
626
|
+
end
|
627
|
+
|
628
|
+
def sync=(v)
|
629
|
+
if @dev.respond_to?(:sync=)
|
630
|
+
@dev.sync = v
|
631
|
+
else
|
632
|
+
super
|
633
|
+
end
|
634
|
+
end
|
635
|
+
|
636
|
+
def reopen(path, mode)
|
637
|
+
if mode != 'a'
|
638
|
+
raise "Unsupported mode: #{mode}"
|
373
639
|
end
|
640
|
+
super(path)
|
374
641
|
end
|
375
642
|
end
|
376
643
|
end
|