diff --git a/lib/fluent/plugin/grok.rb b/lib/fluent/plugin/grok.rb
index 5bbb78a..f493503 100644
--- a/lib/fluent/plugin/grok.rb
+++ b/lib/fluent/plugin/grok.rb
@@ -131,7 +131,7 @@ def expand_pattern(pattern)
else
replacement_pattern = "(?:#{curr_pattern})"
end
- pattern.sub!(m[0]) do |s|
+ pattern = pattern.sub(m[0]) do |s|
replacement_pattern
end
end
diff --git a/test/test_grok_parser.rb b/test/test_grok_parser.rb
index 13cdaa7..a9abf46 100644
--- a/test/test_grok_parser.rb
+++ b/test/test_grok_parser.rb
@@ -158,37 +158,49 @@ class GrokParserTest < ::Test::Unit::TestCase
end
end
- test "no grok patterns" do
- assert_raise Fluent::ConfigError do
- create_driver('')
+ sub_test_case "configure" do
+ test "no grok patterns" do
+ assert_raise Fluent::ConfigError do
+ create_driver('')
+ end
+ end
+
+ test "invalid config value type" do
+ assert_raise Fluent::ConfigError do
+ create_driver(%[
+
+ pattern %{PATH:path:foo}
+
+ ])
+ end
end
- end
- test "invalid config value type" do
- assert_raise Fluent::ConfigError do
- create_driver(%[
+ test "invalid config value type and normal grok pattern" do
+ d = create_driver(%[
pattern %{PATH:path:foo}
+
+ pattern %{IP:ip_address}
+
])
+ assert_equal(1, d.instance.instance_variable_get(:@grok).parsers.size)
+ logs = $log.instance_variable_get(:@logger).instance_variable_get(:@logdev).logs
+ error_logs = logs.grep(/error_class/)
+ assert_equal(1, error_logs.size)
+ error_message = error_logs.first[/error="(.+)"/, 1]
+ assert_equal("unknown value conversion for key:'path', type:'foo'", error_message)
end
- end
- test "invalid config value type and normal grok pattern" do
- d = create_driver(%[
-
- pattern %{PATH:path:foo}
-
-
- pattern %{IP:ip_address}
-
- ])
- assert_equal(1, d.instance.instance_variable_get(:@grok).parsers.size)
- logs = $log.instance_variable_get(:@logger).instance_variable_get(:@logdev).logs
- error_logs = logs.grep(/error_class/)
- assert_equal(1, error_logs.size)
- error_message = error_logs.first[/error="(.+)"/, 1]
- assert_equal("unknown value conversion for key:'path', type:'foo'", error_message)
+ test "keep original configuration" do
+ config = %[
+
+ pattern %{INT:user_id:integer} paid %{NUMBER:paid_amount:float}
+
+ ]
+ d = create_driver(config)
+ assert_equal("%{INT:user_id:integer} paid %{NUMBER:paid_amount:float}", d.instance.config.elements("grok").first["pattern"])
+ end
end
sub_test_case "grok_name_key" do