Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 12 additions & 10 deletions lib/logstash/filters/prune.rb
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,18 @@ class LogStash::Filters::Prune < LogStash::Filters::Base
config :interpolate, :validate => :boolean, :default => false

# Include only fields only if their names match specified regexps, default to empty list which means include everything.
# [source,ruby]
# filter {
# %PLUGIN% {
# [source,ruby]
# filter {
# %PLUGIN% {
# whitelist_names => [ "method", "(referrer|status)", "${some}_field" ]
# }
# }
config :whitelist_names, :validate => :array, :default => []

# Exclude fields whose names match specified regexps, by default exclude unresolved `%{field}` strings.
# [source,ruby]
# filter {
# %PLUGIN% {
# filter {
# %PLUGIN% {
# blacklist_names => [ "method", "(referrer|status)", "${some}_field" ]
# }
# }
Expand All @@ -41,8 +41,8 @@ class LogStash::Filters::Prune < LogStash::Filters::Base
# Include specified fields only if their values match one of the supplied regular expressions.
# In case field values are arrays, each array item is matched against the regular expressions and only matching array items will be included.
# [source,ruby]
# filter {
# %PLUGIN% {
# filter {
# %PLUGIN% {
# whitelist_values => [ "uripath", "/index.php",
# "method", "(GET|POST)",
# "status", "^[^2]" ]
Expand All @@ -53,8 +53,8 @@ class LogStash::Filters::Prune < LogStash::Filters::Base
# Exclude specified fields if their values match one of the supplied regular expressions.
# In case field values are arrays, each array item is matched against the regular expressions and matching array items will be excluded.
# [source,ruby]
# filter {
# %PLUGIN% {
# filter {
# %PLUGIN% {
# blacklist_values => [ "uripath", "/index.php",
# "method", "(HEAD|OPTIONS)",
# "status", "^[^2]" ]
Expand All @@ -78,7 +78,7 @@ def register

public
def filter(event)


hash = event.to_hash

Expand All @@ -91,13 +91,15 @@ def filter(event)
unless @whitelist_names.empty?
@whitelist_names_regexp = Regexp.union(@whitelist_names.map {|x| Regexp.new(event.sprintf(x))}) if @interpolate
hash.each_key do |field|
next if field.nil?
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we add a log line for this behaviour? specially when we aim to debug this behaviour why is not creating the fields the user is expecting to?

fields_to_remove << field unless field.match(@whitelist_names_regexp)
end
end

unless @blacklist_names.empty?
@blacklist_names_regexp = Regexp.union(@blacklist_names.map {|x| Regexp.new(event.sprintf(x))}) if @interpolate
hash.each_key do |field|
next if field.nil?
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same thing here.

fields_to_remove << field if field.match(@blacklist_names_regexp)
end
end
Expand Down
9 changes: 9 additions & 0 deletions spec/filters/prune_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -438,4 +438,13 @@
end
end

describe "when field name is nil" do
it "should not raise exception" do
subject = LogStash::Filters::Prune.new({})
subject.register
event = LogStash::Event.new(nil => "foo")
expect {subject.filter(event)}.not_to raise_error
end
end

end