diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/logging/EasyLogger.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/logging/EasyLogger.java
index 1986bf8..246cf49 100644
--- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/logging/EasyLogger.java
+++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/logging/EasyLogger.java
@@ -4,6 +4,8 @@
 import java.io.IOException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.regex.Matcher;
+
 import org.skywalking.apm.agent.core.conf.Config;
 import org.skywalking.apm.agent.core.conf.Constants;
 import org.skywalking.apm.logging.ILog;
@@ -35,8 +37,10 @@
             if (parametersIndex >= parameters.length) {
                 break;
             }
-
-            tmpMessage = tmpMessage.replaceFirst("\\{\\}", String.valueOf(parameters[parametersIndex++]));
+            /**
+             * @Fix the Illegal group reference issue
+             */
+            tmpMessage = tmpMessage.replaceFirst("\\{\\}", Matcher.quoteReplacement(String.valueOf(parameters[parametersIndex++])));
             startSize = index + 2;
         }
         return tmpMessage;
diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/logging/EasyLoggerTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/logging/EasyLoggerTest.java
index e447ea9..e3866d3 100644
--- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/logging/EasyLoggerTest.java
+++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/logging/EasyLoggerTest.java
@@ -54,13 +54,41 @@
     }
 
     @Test
+    public void testLogWithSpecialChar() {
+        PrintStream output = Mockito.mock(PrintStream.class);
+        System.setOut(output);
+        PrintStream err = Mockito.mock(PrintStream.class);
+        System.setErr(err);
+        EasyLogger logger = new EasyLogger(EasyLoggerTest.class);
+
+        Assert.assertTrue(logger.isDebugEnable());
+        Assert.assertTrue(logger.isInfoEnable());
+        Assert.assertTrue(logger.isWarnEnable());
+        Assert.assertTrue(logger.isErrorEnable());
+
+        logger.debug("$^!@#*()");
+        logger.debug("hello {}", "!@#$%^&*(),./[]:;");
+        logger.info("{}{}");
+        logger.info("hello {}", "{}{}");
+
+        logger.warn("hello {}", "\\");
+        logger.warn("hello \\");
+        logger.error("hello <>..");
+        logger.error("hello ///\\\\", new NullPointerException());
+        logger.error(new NullPointerException(), "hello {}", "&&&**%%");
+
+        Mockito.verify(output, times(9))
+                .println(anyString());
+    }
+
+    @Test
     public void testFormat() {
         NullPointerException exception = new NullPointerException();
         EasyLogger logger = new EasyLogger(EasyLoggerTest.class);
         String formatLines = logger.format(exception);
         String[] lines = formatLines.split(Constants.LINE_SEPARATOR);
         Assert.assertEquals("java.lang.NullPointerException", lines[1]);
-        Assert.assertEquals("\tat org.skywalking.apm.agent.core.logging.EasyLoggerTest.testFormat(EasyLoggerTest.java:58)", lines[2]);
+        Assert.assertEquals("\tat org.skywalking.apm.agent.core.logging.EasyLoggerTest.testFormat(EasyLoggerTest.java:86)", lines[2]);
     }
 
     @AfterClass
