fluentd 1.10.0 → 1.11.0
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 +4 -4
- data/CHANGELOG.md +117 -1
- data/CONTRIBUTING.md +1 -1
- data/README.md +4 -0
- data/docs/SECURITY_AUDIT.pdf +0 -0
- data/lib/fluent/command/debug.rb +1 -0
- data/lib/fluent/command/fluentd.rb +14 -1
- data/lib/fluent/config.rb +1 -0
- data/lib/fluent/daemonizer.rb +88 -0
- data/lib/fluent/log.rb +45 -6
- data/lib/fluent/match.rb +1 -1
- data/lib/fluent/plugin/in_dummy.rb +2 -2
- data/lib/fluent/plugin/in_forward.rb +2 -2
- data/lib/fluent/plugin/in_gc_stat.rb +16 -0
- data/lib/fluent/plugin/in_http.rb +2 -2
- data/lib/fluent/plugin/in_monitor_agent.rb +1 -1
- data/lib/fluent/plugin/in_syslog.rb +4 -4
- data/lib/fluent/plugin/in_tail.rb +3 -3
- data/lib/fluent/plugin/in_tail/position_file.rb +23 -6
- data/lib/fluent/plugin/in_unix.rb +77 -77
- data/lib/fluent/plugin/out_copy.rb +1 -1
- data/lib/fluent/plugin/out_file.rb +1 -1
- data/lib/fluent/plugin/out_forward.rb +23 -18
- data/lib/fluent/plugin/out_forward/load_balancer.rb +1 -1
- data/lib/fluent/plugin/out_http.rb +15 -2
- data/lib/fluent/plugin/parser_multiline.rb +1 -1
- data/lib/fluent/plugin/parser_syslog.rb +216 -55
- data/lib/fluent/plugin_helper/record_accessor.rb +14 -0
- data/lib/fluent/plugin_helper/service_discovery.rb +7 -0
- data/lib/fluent/plugin_helper/service_discovery/manager.rb +8 -0
- data/lib/fluent/plugin_helper/socket.rb +20 -2
- data/lib/fluent/plugin_helper/socket_option.rb +2 -2
- data/lib/fluent/supervisor.rb +21 -9
- data/lib/fluent/system_config.rb +2 -1
- data/lib/fluent/test/filter_test.rb +2 -2
- data/lib/fluent/test/output_test.rb +3 -3
- data/lib/fluent/version.rb +1 -1
- data/test/command/test_fluentd.rb +57 -10
- data/test/config/test_system_config.rb +2 -0
- data/test/plugin/in_tail/test_position_file.rb +24 -0
- data/test/plugin/out_forward/test_load_balancer.rb +46 -0
- data/test/plugin/test_in_gc_stat.rb +24 -1
- data/test/plugin/test_in_syslog.rb +16 -1
- data/test/plugin/test_in_tail.rb +39 -16
- data/test/plugin/test_in_unix.rb +128 -73
- data/test/plugin/test_out_forward.rb +11 -2
- data/test/plugin/test_out_http.rb +38 -0
- data/test/plugin/test_out_null.rb +1 -1
- data/test/plugin/test_output_as_buffered_retries.rb +12 -4
- data/test/plugin/test_output_as_buffered_secondary.rb +9 -1
- data/test/plugin/test_parser_syslog.rb +77 -29
- data/test/plugin_helper/data/cert/cert_chains/ca-cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/cert_chains/ca-cert.pem +20 -0
- data/test/plugin_helper/data/cert/cert_chains/cert-key.pem +27 -0
- data/test/plugin_helper/data/cert/cert_chains/cert.pem +40 -0
- data/test/plugin_helper/data/cert/generate_cert.rb +38 -0
- data/test/plugin_helper/http_server/test_app.rb +1 -1
- data/test/plugin_helper/http_server/test_route.rb +1 -1
- data/test/plugin_helper/test_http_server_helper.rb +2 -2
- data/test/plugin_helper/test_record_accessor.rb +41 -0
- data/test/plugin_helper/test_server.rb +1 -1
- data/test/plugin_helper/test_service_discovery.rb +37 -4
- data/test/plugin_helper/test_socket.rb +131 -0
- data/test/test_daemonizer.rb +91 -0
- data/test/test_log.rb +44 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 269cadf10ed4159e0c5279177cde46de14d563637b38ccadc71da090a098a22e
|
4
|
+
data.tar.gz: 9bf1dca5f46b1f3b245231c0e08b3b709add909840c3241bf29401952e02f27a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 115e9f075e91136de66003ced2eda6076c1cff31c1e8edae5bb063f4c97420e4f832bcf6539a1ac4ee50bbe28d2050a6782840e88c951fa8fcbb52c66a889569
|
7
|
+
data.tar.gz: 25ebff981ebc41c4b6c0de4a6710350a07653be263019a138bb7be62d97dd6593bff67b7dd4d6ca4d37d0f84427b05d4c9b06f56cc9bc344fa46e0cfa82a7d68
|
data/CHANGELOG.md
CHANGED
@@ -1,10 +1,126 @@
|
|
1
|
+
# v1.11
|
2
|
+
|
3
|
+
## Release v1.11.0 - 2020/06/04
|
4
|
+
|
5
|
+
### New feature
|
6
|
+
|
7
|
+
* in_unix: Use v1 API
|
8
|
+
https://github.com/fluent/fluentd/pull/2992
|
9
|
+
|
10
|
+
### Enhancement
|
11
|
+
|
12
|
+
* parser_syslog: Support any `time_format` for RFC3164 string parser
|
13
|
+
https://github.com/fluent/fluentd/pull/2988
|
14
|
+
* parser_syslog: Add new parser for RFC5424
|
15
|
+
https://github.com/fluent/fluentd/pull/3015
|
16
|
+
* Refactoring code
|
17
|
+
https://github.com/fluent/fluentd/pull/3019
|
18
|
+
|
19
|
+
### Bug fix
|
20
|
+
|
21
|
+
* in_gc_stat: Add `use_symbol_keys` parameter to emit string key record
|
22
|
+
https://github.com/fluent/fluentd/pull/3008
|
23
|
+
|
1
24
|
# v1.10
|
2
25
|
|
26
|
+
## Release v1.10.4 - 2020/05/12
|
27
|
+
|
28
|
+
### Enhancement
|
29
|
+
|
30
|
+
* out_http: Support single json array payload
|
31
|
+
https://github.com/fluent/fluentd/pull/2973
|
32
|
+
* Refactoring
|
33
|
+
https://github.com/fluent/fluentd/pull/2988
|
34
|
+
|
35
|
+
### Bug fix
|
36
|
+
|
37
|
+
* supervisor: Call `File.umask(0)` for standalone worker
|
38
|
+
https://github.com/fluent/fluentd/pull/2987
|
39
|
+
* out_forward: Fix ZeroDivisionError issue with `weight 0`
|
40
|
+
https://github.com/fluent/fluentd/pull/2989
|
41
|
+
|
42
|
+
## Release v1.10.3 - 2020/05/01
|
43
|
+
|
44
|
+
### Enhancement
|
45
|
+
|
46
|
+
* record_accessor: Add `set` method
|
47
|
+
https://github.com/fluent/fluentd/pull/2977
|
48
|
+
* config: Ruby DSL format is deprecated
|
49
|
+
https://github.com/fluent/fluentd/pull/2958
|
50
|
+
* Refactor code
|
51
|
+
https://github.com/fluent/fluentd/pull/2961
|
52
|
+
https://github.com/fluent/fluentd/pull/2962
|
53
|
+
https://github.com/fluent/fluentd/pull/2965
|
54
|
+
https://github.com/fluent/fluentd/pull/2966
|
55
|
+
https://github.com/fluent/fluentd/pull/2978
|
56
|
+
|
57
|
+
### Bug fix
|
58
|
+
|
59
|
+
* out_forward: Disable `linger_timeout` setting on Windows
|
60
|
+
https://github.com/fluent/fluentd/pull/2959
|
61
|
+
* out_forward: Fix warning of service discovery manager when fluentd stops
|
62
|
+
https://github.com/fluent/fluentd/pull/2974
|
63
|
+
|
64
|
+
## Release v1.10.2 - 2020/04/15
|
65
|
+
|
66
|
+
### Enhancement
|
67
|
+
|
68
|
+
* out_copy: Add plugin_id to log message
|
69
|
+
https://github.com/fluent/fluentd/pull/2934
|
70
|
+
* socket: Allow cert chains in mutual auth
|
71
|
+
https://github.com/fluent/fluentd/pull/2930
|
72
|
+
* system: Add ignore_repeated_log_interval parameter
|
73
|
+
https://github.com/fluent/fluentd/pull/2937
|
74
|
+
* windows: Allow to launch fluentd from whitespace included path
|
75
|
+
https://github.com/fluent/fluentd/pull/2920
|
76
|
+
* Refactor code
|
77
|
+
https://github.com/fluent/fluentd/pull/2935
|
78
|
+
https://github.com/fluent/fluentd/pull/2936
|
79
|
+
https://github.com/fluent/fluentd/pull/2938
|
80
|
+
https://github.com/fluent/fluentd/pull/2939
|
81
|
+
https://github.com/fluent/fluentd/pull/2946
|
82
|
+
|
83
|
+
### Bug fix
|
84
|
+
|
85
|
+
* in_syslog: Fix octet-counting mode bug
|
86
|
+
https://github.com/fluent/fluentd/pull/2942
|
87
|
+
* out_forward: Create timer for purging obsolete sockets when keepalive_timeout is not set
|
88
|
+
https://github.com/fluent/fluentd/pull/2943
|
89
|
+
* out_forward: Need authentication when sending tcp heartbeat with keepalive
|
90
|
+
https://github.com/fluent/fluentd/pull/2945
|
91
|
+
* command: Fix fluent-debug start failure
|
92
|
+
https://github.com/fluent/fluentd/pull/2948
|
93
|
+
* command: Fix regression of supervisor's worker and `--daemon` combo
|
94
|
+
https://github.com/fluent/fluentd/pull/2950
|
95
|
+
|
96
|
+
## Release v1.10.1 - 2020/04/02
|
97
|
+
|
98
|
+
### Enhancement
|
99
|
+
|
100
|
+
* command: `--daemon` and `--no-supervisor` now work together
|
101
|
+
https://github.com/fluent/fluentd/pull/2912
|
102
|
+
* Refactor code
|
103
|
+
https://github.com/fluent/fluentd/pull/2913
|
104
|
+
|
105
|
+
### Bug fix
|
106
|
+
|
107
|
+
* in_tail: `Fix pos_file_compaction_interval` parameter type
|
108
|
+
https://github.com/fluent/fluentd/pull/2921
|
109
|
+
* in_tail: Fix seek position update after compaction
|
110
|
+
https://github.com/fluent/fluentd/pull/2922
|
111
|
+
* parser_syslog: Fix regression in the `with_priority` and RFC5424 case
|
112
|
+
https://github.com/fluent/fluentd/pull/2923
|
113
|
+
|
114
|
+
### Misc
|
115
|
+
|
116
|
+
* Add document for security audit
|
117
|
+
https://github.com/fluent/fluentd/pull/2911
|
118
|
+
|
3
119
|
## Release v1.10.0 - 2020/03/24
|
4
120
|
|
5
121
|
### New feature
|
6
122
|
|
7
|
-
* sd plugin: Add
|
123
|
+
* sd plugin: Add SRV record plugin
|
8
124
|
https://github.com/fluent/fluentd/pull/2876
|
9
125
|
|
10
126
|
### Enhancement
|
data/CONTRIBUTING.md
CHANGED
@@ -24,7 +24,7 @@ If you find a bug of Fluentd or a mistake in the documentation, you can help us
|
|
24
24
|
submitting an issue to Fluentd. Even better you can submit a Pull Request with a fix.
|
25
25
|
|
26
26
|
* **Fluentd**: Use [fluentd](https://github.com/fluent/fluentd) repository. Fill issue template.
|
27
|
-
* **Documentation**: Use [fluentd
|
27
|
+
* **Documentation**: Use [fluentd documentation](https://github.com/fluent/fluentd-docs-gitbook) repository.
|
28
28
|
|
29
29
|
If you find a bug of 3rd party plugins, please submit an issue to each plugin repository.
|
30
30
|
And use [omnibus-td-agent](https://github.com/treasure-data/omnibus-td-agent) repository for td-agent related issues.
|
data/README.md
CHANGED
@@ -81,6 +81,10 @@ You can run specified test via `TEST` environment variable:
|
|
81
81
|
- Copyright: 2011-2019 Fluentd Authors
|
82
82
|
- License: Apache License, Version 2.0
|
83
83
|
|
84
|
+
## Security
|
85
|
+
|
86
|
+
A third party security audit was performed by Cure53, you can see the full report [here](docs/SECURITY_AUDIT.pdf).
|
87
|
+
|
84
88
|
## Contributors:
|
85
89
|
|
86
90
|
Patches contributed by [great developers](https://github.com/fluent/fluentd/contributors).
|
Binary file
|
data/lib/fluent/command/debug.rb
CHANGED
@@ -335,5 +335,18 @@ else
|
|
335
335
|
end
|
336
336
|
worker = Fluent::Supervisor.new(opts)
|
337
337
|
worker.configure
|
338
|
-
|
338
|
+
|
339
|
+
if opts[:daemonize] && opts[:standalone_worker]
|
340
|
+
require 'fluent/daemonizer'
|
341
|
+
args = ARGV.dup
|
342
|
+
i = args.index('--daemon')
|
343
|
+
args.delete_at(i + 1) # value of --daemon
|
344
|
+
args.delete_at(i) # --daemon itself
|
345
|
+
|
346
|
+
Fluent::Daemonizer.daemonize(opts[:daemonize], args) do
|
347
|
+
worker.run_worker
|
348
|
+
end
|
349
|
+
else
|
350
|
+
worker.run_worker
|
351
|
+
end
|
339
352
|
end
|
data/lib/fluent/config.rb
CHANGED
@@ -62,6 +62,7 @@ module Fluent
|
|
62
62
|
Parser.parse(str, fname, basepath)
|
63
63
|
when :ruby
|
64
64
|
require 'fluent/config/dsl'
|
65
|
+
$log.warn("Ruby DSL configuration format is deprecated. Please use original configuration format. https://docs.fluentd.org/configuration/config-file")
|
65
66
|
Config::DSL::Parser.parse(str, File.join(basepath, fname))
|
66
67
|
else
|
67
68
|
raise "[BUG] unknown configuration parser specification:'#{parser}'"
|
@@ -0,0 +1,88 @@
|
|
1
|
+
#
|
2
|
+
# Fluentd
|
3
|
+
#
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
# you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
# See the License for the specific language governing permissions and
|
14
|
+
# limitations under the License.
|
15
|
+
#
|
16
|
+
|
17
|
+
require 'fluent/config/error'
|
18
|
+
|
19
|
+
module Fluent
|
20
|
+
class Daemonizer
|
21
|
+
def self.daemonize(pid_path, args = [], &block)
|
22
|
+
new.daemonize(pid_path, args, &block)
|
23
|
+
end
|
24
|
+
|
25
|
+
def daemonize(pid_path, args = [])
|
26
|
+
pid_fullpath = File.absolute_path(pid_path)
|
27
|
+
check_pidfile(pid_fullpath)
|
28
|
+
|
29
|
+
begin
|
30
|
+
Process.daemon(false, false)
|
31
|
+
|
32
|
+
File.write(pid_fullpath, Process.pid.to_s)
|
33
|
+
|
34
|
+
# install signal and set process name are performed by supervisor
|
35
|
+
install_at_exit_handlers(pid_fullpath)
|
36
|
+
|
37
|
+
yield
|
38
|
+
rescue NotImplementedError
|
39
|
+
daemonize_with_spawn(pid_fullpath, args)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def daemonize_with_spawn(pid_fullpath, args)
|
46
|
+
pid = Process.spawn(*['fluentd'].concat(args))
|
47
|
+
|
48
|
+
File.write(pid_fullpath, pid.to_s)
|
49
|
+
|
50
|
+
pid
|
51
|
+
end
|
52
|
+
|
53
|
+
def check_pidfile(pid_path)
|
54
|
+
if File.exist?(pid_path)
|
55
|
+
if !File.readable?(pid_path) || !File.writable?(pid_path)
|
56
|
+
raise Fluent::ConfigError, "Cannot access pid file: #{pid_path}"
|
57
|
+
end
|
58
|
+
|
59
|
+
pid =
|
60
|
+
begin
|
61
|
+
Integer(File.read(pid_path), 10)
|
62
|
+
rescue TypeError, ArgumentError
|
63
|
+
return # ignore
|
64
|
+
end
|
65
|
+
|
66
|
+
begin
|
67
|
+
Process.kill(0, pid)
|
68
|
+
raise Fluent::ConfigError, "pid(#{pid}) is running"
|
69
|
+
rescue Errno::EPERM
|
70
|
+
raise Fluent::ConfigError, "pid(#{pid}) is running"
|
71
|
+
rescue Errno::ESRCH
|
72
|
+
end
|
73
|
+
else
|
74
|
+
unless File.writable?(File.dirname(pid_path))
|
75
|
+
raise Fluent::ConfigError, "Cannot access directory for pid file: #{File.dirname(pid_path)}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def install_at_exit_handlers(pidfile)
|
81
|
+
at_exit do
|
82
|
+
if File.exist?(pidfile)
|
83
|
+
File.delete(pidfile)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/lib/fluent/log.rb
CHANGED
@@ -112,6 +112,7 @@ module Fluent
|
|
112
112
|
@optional_attrs = nil
|
113
113
|
|
114
114
|
@suppress_repeated_stacktrace = opts[:suppress_repeated_stacktrace]
|
115
|
+
@ignore_repeated_log_interval = opts[:ignore_repeated_log_interval]
|
115
116
|
|
116
117
|
@process_type = opts[:process_type] # :supervisor, :worker0, :workers Or :standalone
|
117
118
|
@process_type ||= :standalone # to keep behavior of existing code
|
@@ -139,7 +140,8 @@ module Fluent
|
|
139
140
|
dl_opts = {}
|
140
141
|
dl_opts[:log_level] = @level - 1
|
141
142
|
logger = ServerEngine::DaemonLogger.new(@out, dl_opts)
|
142
|
-
clone = self.class.new(logger, suppress_repeated_stacktrace: @suppress_repeated_stacktrace, process_type: @process_type,
|
143
|
+
clone = self.class.new(logger, suppress_repeated_stacktrace: @suppress_repeated_stacktrace, process_type: @process_type,
|
144
|
+
worker_id: @worker_id, ignore_repeated_log_interval: @ignore_repeated_log_interval)
|
143
145
|
clone.format = @format
|
144
146
|
clone.time_format = @time_format
|
145
147
|
clone.log_event_enabled = @log_event_enabled
|
@@ -149,7 +151,7 @@ module Fluent
|
|
149
151
|
|
150
152
|
attr_reader :format
|
151
153
|
attr_reader :time_format
|
152
|
-
attr_accessor :log_event_enabled
|
154
|
+
attr_accessor :log_event_enabled, :ignore_repeated_log_interval
|
153
155
|
attr_accessor :out
|
154
156
|
attr_accessor :level
|
155
157
|
attr_accessor :optional_header, :optional_attrs
|
@@ -278,6 +280,7 @@ module Fluent
|
|
278
280
|
return if skipped_type?(type)
|
279
281
|
args << block.call if block
|
280
282
|
time, msg = event(:trace, args)
|
283
|
+
return if time.nil?
|
281
284
|
puts [@color_trace, @formatter.call(type, time, LEVEL_TRACE, msg), @color_reset].join
|
282
285
|
rescue
|
283
286
|
# logger should not raise an exception. This rescue prevents unexpected behaviour.
|
@@ -299,6 +302,7 @@ module Fluent
|
|
299
302
|
return if skipped_type?(type)
|
300
303
|
args << block.call if block
|
301
304
|
time, msg = event(:debug, args)
|
305
|
+
return if time.nil?
|
302
306
|
puts [@color_debug, @formatter.call(type, time, LEVEL_DEBUG, msg), @color_reset].join
|
303
307
|
rescue
|
304
308
|
end
|
@@ -319,6 +323,7 @@ module Fluent
|
|
319
323
|
return if skipped_type?(type)
|
320
324
|
args << block.call if block
|
321
325
|
time, msg = event(:info, args)
|
326
|
+
return if time.nil?
|
322
327
|
puts [@color_info, @formatter.call(type, time, LEVEL_INFO, msg), @color_reset].join
|
323
328
|
rescue
|
324
329
|
end
|
@@ -339,6 +344,7 @@ module Fluent
|
|
339
344
|
return if skipped_type?(type)
|
340
345
|
args << block.call if block
|
341
346
|
time, msg = event(:warn, args)
|
347
|
+
return if time.nil?
|
342
348
|
puts [@color_warn, @formatter.call(type, time, LEVEL_WARN, msg), @color_reset].join
|
343
349
|
rescue
|
344
350
|
end
|
@@ -359,6 +365,7 @@ module Fluent
|
|
359
365
|
return if skipped_type?(type)
|
360
366
|
args << block.call if block
|
361
367
|
time, msg = event(:error, args)
|
368
|
+
return if time.nil?
|
362
369
|
puts [@color_error, @formatter.call(type, time, LEVEL_ERROR, msg), @color_reset].join
|
363
370
|
rescue
|
364
371
|
end
|
@@ -379,6 +386,7 @@ module Fluent
|
|
379
386
|
return if skipped_type?(type)
|
380
387
|
args << block.call if block
|
381
388
|
time, msg = event(:fatal, args)
|
389
|
+
return if time.nil?
|
382
390
|
puts [@color_fatal, @formatter.call(type, time, LEVEL_FATAL, msg), @color_reset].join
|
383
391
|
rescue
|
384
392
|
end
|
@@ -412,6 +420,20 @@ module Fluent
|
|
412
420
|
@out.reset if @out.respond_to?(:reset)
|
413
421
|
end
|
414
422
|
|
423
|
+
CachedLog = Struct.new(:msg, :time)
|
424
|
+
|
425
|
+
def ignore_repeated_log?(key, time, message)
|
426
|
+
cached_log = Thread.current[key]
|
427
|
+
return false if cached_log.nil?
|
428
|
+
(cached_log.msg == message) && (time - cached_log.time <= @ignore_repeated_log_interval)
|
429
|
+
end
|
430
|
+
|
431
|
+
def suppress_stacktrace?(backtrace)
|
432
|
+
cached_log = Thread.current[:last_repeated_stacktrace]
|
433
|
+
return false if cached_log.nil?
|
434
|
+
cached_log.msg == backtrace
|
435
|
+
end
|
436
|
+
|
415
437
|
def dump_stacktrace(type, backtrace, level)
|
416
438
|
return if @level > level
|
417
439
|
|
@@ -419,13 +441,16 @@ module Fluent
|
|
419
441
|
|
420
442
|
if @format == :text
|
421
443
|
line = caller_line(type, time, 5, level)
|
422
|
-
if @
|
444
|
+
if @ignore_repeated_log_interval && ignore_repeated_log?(:last_repeated_stacktrace, time, backtrace)
|
445
|
+
return
|
446
|
+
elsif @suppress_repeated_stacktrace && suppress_stacktrace?(backtrace)
|
423
447
|
puts [" ", line, 'suppressed same stacktrace'].join
|
448
|
+
Thread.current[:last_repeated_stacktrace] = CachedLog.new(backtrace, time) if @ignore_repeated_log_interval
|
424
449
|
else
|
425
450
|
backtrace.each { |msg|
|
426
451
|
puts [" ", line, msg].join
|
427
452
|
}
|
428
|
-
Thread.current[:last_repeated_stacktrace] = backtrace if @suppress_repeated_stacktrace
|
453
|
+
Thread.current[:last_repeated_stacktrace] = CachedLog.new(backtrace, time) if @suppress_repeated_stacktrace
|
429
454
|
end
|
430
455
|
else
|
431
456
|
r = {
|
@@ -436,11 +461,14 @@ module Fluent
|
|
436
461
|
r['worker_id'] = wid
|
437
462
|
end
|
438
463
|
|
439
|
-
if @
|
464
|
+
if @ignore_repeated_log_interval && ignore_repeated_log?(:last_repeated_stacktrace, time, backtrace)
|
465
|
+
return
|
466
|
+
elsif @suppress_repeated_stacktrace && suppress_stacktrace?(backtrace)
|
440
467
|
r['message'] = 'suppressed same stacktrace'
|
468
|
+
Thread.current[:last_repeated_stacktrace] = CachedLog.new(backtrace, time) if @ignore_repeated_log_interval
|
441
469
|
else
|
442
470
|
r['message'] = backtrace.join("\n")
|
443
|
-
Thread.current[:last_repeated_stacktrace] = backtrace if @suppress_repeated_stacktrace
|
471
|
+
Thread.current[:last_repeated_stacktrace] = CachedLog.new(backtrace, time) if @suppress_repeated_stacktrace
|
444
472
|
end
|
445
473
|
|
446
474
|
puts Yajl.dump(r)
|
@@ -479,6 +507,14 @@ module Fluent
|
|
479
507
|
end
|
480
508
|
}
|
481
509
|
|
510
|
+
if @ignore_repeated_log_interval
|
511
|
+
if ignore_repeated_log?(:last_repeated_log, time, message)
|
512
|
+
return nil, nil
|
513
|
+
else
|
514
|
+
Thread.current[:last_repeated_log] = CachedLog.new(message, time)
|
515
|
+
end
|
516
|
+
end
|
517
|
+
|
482
518
|
if @log_event_enabled && !@threads_exclude_events.include?(Thread.current)
|
483
519
|
record = map.dup
|
484
520
|
record.keys.each {|key|
|
@@ -530,6 +566,9 @@ module Fluent
|
|
530
566
|
if logger.instance_variable_defined?(:@suppress_repeated_stacktrace)
|
531
567
|
@suppress_repeated_stacktrace = logger.instance_variable_get(:@suppress_repeated_stacktrace)
|
532
568
|
end
|
569
|
+
if logger.instance_variable_defined?(:@ignore_repeated_log_interval)
|
570
|
+
@ignore_repeated_log_interval = logger.instance_variable_get(:@ignore_repeated_log_interval)
|
571
|
+
end
|
533
572
|
|
534
573
|
self.format = @logger.format
|
535
574
|
self.time_format = @logger.time_format
|