feat: add log4j2 configuration (#214)

diff --git a/.gitignore b/.gitignore
index 7eb9c23..7fe89e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,6 +23,7 @@
 !**/src/main/**/target/
 !**/src/test/**/target/
 release/
+logs/
 
 ### IntelliJ IDEA ###
 .idea
diff --git a/pom.xml b/pom.xml
index 3495afd..c7a652d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -89,6 +89,11 @@
                 <scope>import</scope>
             </dependency>
             <dependency>
+                <groupId>com.lmax</groupId>
+                <artifactId>disruptor</artifactId>
+                <version>3.4.4</version>
+            </dependency>
+            <dependency>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-dependencies</artifactId>
                 <version>${spring-boot.version}</version>
diff --git a/runner-core/pom.xml b/runner-core/pom.xml
index ee178c5..2a50d77 100644
--- a/runner-core/pom.xml
+++ b/runner-core/pom.xml
@@ -64,6 +64,10 @@
             </exclusions>
         </dependency>
         <dependency>
+            <groupId>com.lmax</groupId>
+            <artifactId>disruptor</artifactId>
+        </dependency>
+        <dependency>
             <groupId>io.netty</groupId>
             <artifactId>netty-all</artifactId>
         </dependency>
diff --git a/runner-starter/src/main/resources/log4j2.xml b/runner-starter/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..fe2c888
--- /dev/null
+++ b/runner-starter/src/main/resources/log4j2.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  ~
+  -->
+
+<configuration status="OFF">
+
+    <Properties>
+        <Property name="LOG_LEVEL">debug</Property>
+        <Property name="USER_DIR">${sys:user.dir}</Property>
+        <Property name="FILE_ENCODING">${sys:file.encoding}</Property>
+    </Properties>
+
+    <Appenders>
+        <RollingFile name="ERROR-APPENDER" fileName="${USER_DIR}/logs/java-runner-common-error.log" append="true"
+                     filePattern="${USER_DIR}/logs/java-runner-common-error.log.%d{yyyy-MM-dd}">
+            <!-- only print error log -->
+            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
+            <PatternLayout charset="${FILE_ENCODING}">
+                <pattern>%d %-5p %-32t - %m%n %throwable</pattern>
+            </PatternLayout>
+            <Policies>
+                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
+            </Policies>
+        </RollingFile>
+
+        <RollingFile name="ROOT-APPENDER" fileName="${USER_DIR}/logs/java-runner-common-default.log" append="true"
+                     filePattern="${USER_DIR}/logs/java-runner-common-default.log.%d{yyyy-MM-dd}">
+            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
+            <PatternLayout charset="${FILE_ENCODING}">
+                <pattern>%d %-5p %-32t - %m%n %throwable</pattern>
+            </PatternLayout>
+            <Policies>
+                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
+            </Policies>
+        </RollingFile>
+    </Appenders>
+
+    <Loggers>
+        <AsyncRoot level="${LOG_LEVEL}">
+            <appender-ref ref="ROOT-APPENDER"/>
+            <appender-ref ref="ERROR-APPENDER"/>
+        </AsyncRoot>
+    </Loggers>
+</configuration>