This is an automated email from the ASF dual-hosted git repository.

fanjia pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-seatunnel.git


The following commit(s) were added to refs/heads/dev by this push:
     new 8241ec193 [Feature][Log] Integrate slf4j and log4j2 for unified 
management logs (#3025)
8241ec193 is described below

commit 8241ec193a77ec639302a7762ebc9349bb4df913
Author: hailin0 <[email protected]>
AuthorDate: Wed Nov 2 16:57:38 2022 +0800

    [Feature][Log] Integrate slf4j and log4j2 for unified management logs 
(#3025)
    
    * [Feature][Log] Integrate slf4j and log4j2 for unified management logs
    
    Maven dependencys:
    - Add slf4j & log4j2 provider & bridges scope into root pom.xml 
dependencyManagement
      - include: slf4j-api、log4j2、log4j2-slf4j-impl(slf4j provider)、xxx-to-slf4j
      - exclude(provided): 
logback、log4j1、commons-logging、slf4j-other-provider、log4j2-to-slf4j
    - Add slf4j & log4j2 & jcl-over-slf4j into root pom.xml dependencies
    - Exclude all logging system packages in maven-sheade-plugin
    
    SeaTunnel engine module:
    - Enhanced logging http endpoint to dynamically change log4j2 level
    - Config `hazelcast.logging.type: log4j2`
    
    SeaTunnel Dist module:
    - Use `maven-assembly-plugin` to copy slf4j & log4j2 & jcl-over-slf4j 
packages to `lib/logging` for use by starter shell
    
    Engine Starter module[flink]:
    - Use `maven-dependency-plugin` to copy slf4j & log4j2 & jcl-over-slf4j 
packages to `target/logging-e2e` for use by E2E testcase
    - Add `lib/logging` directory to java classpath in start shell for use by 
starter class
    - Add jcl-over-slf4j package into shade jar
    - Config `config/log4j2-console.properties` on engine-client
    - Exclude log4j1 & log4j2 & logback & commons-logging from shade jar
    - Fix shell script tail last line text
    
    Engine Starter module[spark]:
    - Use `maven-dependency-plugin` to copy slf4j & log4j2 & jcl-over-slf4j 
packages to `target/logging-e2e` for use by E2E testcase
    - Add `lib/logging` directory to java classpath in start shell for use by 
starter class
    - Config `config/log4j2-console.properties` on engine-client
    - Exclude log4j1 & log4j2 & logback & commons-logging from shade jar
    - Fix shell script tail last line text
    
    Engine Starter module[seatunnel]:
    - Add `disruptor` jar and config `-Dlog4j2.contextSelector` to use 
asynchronous logger on engine-server
    - Config `config/log4j2-file.properties` on engine-server
    - Config `config/log4j2-console.properties` on engine-client
    - Add slf4j & log4j2 & jcl-over-slf4j & log4j-1.2-api package into starter 
shade jar
    
    Connector-v1 module[seatunnel-connector-flink-clickhouse]:
    - Exclude commons-logging from shade jar
    
    E2E:
    - Remove `log4j.properties` files
    - Add `log4j2-test.properties` output log to `STDOUT` or `STDERR`
    - Copy starter[flink、spark] `target/logging-e2e` into engine container
    - Copy config dir into engine container
    - Improve execute job logs
    
    * merge dev change
    
    Co-authored-by: Kirs <[email protected]>
---
 config/log4j2.properties                           |  78 +++++++
 pom.xml                                            | 223 ++++++++++++++++++---
 seatunnel-core/pom.xml                             |  40 ++--
 seatunnel-core/seatunnel-core-base/pom.xml         |  21 --
 seatunnel-core/seatunnel-core-flink-sql/pom.xml    |  43 ++++
 .../src/main/bin/start-seatunnel-sql.sh            |  15 +-
 seatunnel-core/seatunnel-core-flink/pom.xml        |  43 ++++
 .../src/main/bin/start-seatunnel-flink.sh          |  22 +-
 seatunnel-core/seatunnel-core-spark/pom.xml        |  52 +++++
 .../src/main/bin/start-seatunnel-spark.sh          |  16 +-
 seatunnel-core/seatunnel-core-starter/pom.xml      |  21 --
 seatunnel-core/seatunnel-flink-starter/pom.xml     |  43 ++++
 .../main/bin/start-seatunnel-flink-connector-v2.sh |  16 +-
 seatunnel-core/seatunnel-spark-starter/pom.xml     |  52 +++++
 .../main/bin/start-seatunnel-spark-connector-v2.sh |  16 +-
 seatunnel-core/seatunnel-starter/pom.xml           |  41 ++++
 .../src/main/bin/seatunnel-cluster.sh              |  10 +
 .../seatunnel-starter/src/main/bin/seatunnel.sh    |  13 ++
 .../src/main/resources/log4j2.properties           |  42 ++++
 seatunnel-dist/release-docs/LICENSE                |  14 +-
 seatunnel-dist/release-docs/NOTICE                 |  19 +-
 .../src/main/assembly/assembly-bin-ci.xml          |  15 ++
 seatunnel-dist/src/main/assembly/assembly-bin.xml  |  15 ++
 seatunnel-e2e/pom.xml                              |   5 -
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../common/container/AbstractTestContainer.java    |  26 ++-
 .../flink/AbstractTestFlinkContainer.java          |   1 +
 .../spark/AbstractTestSparkContainer.java          |   1 +
 .../seatunnel/e2e/common/util/ContainerUtil.java   |  10 +
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j2.properties           |  42 ++++
 .../src/test/resources/log4j.properties            |  25 ---
 .../src/test/resources/log4j2-test.properties      |  47 +++++
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  23 ---
 .../src/test/resources/log4j.properties            |  23 ---
 .../src/test/resources/log4j.properties            |  23 ---
 .../src/test/resources/log4j.properties            |  23 ---
 .../src/test/resources/log4j.properties            |  23 ---
 .../src/test/resources/log4j.properties            |  23 ---
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  23 ---
 .../src/test/resources/log4j.properties            |  23 ---
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j.properties            |  22 --
 .../src/test/resources/log4j2-test.properties      |  42 ++++
 .../src/main/resources/hazelcast-client.yaml       |   3 +-
 .../src/main/resources/hazelcast.yaml              |   6 +
 .../seatunnel/engine/server/NodeExtension.java     |  17 ++
 .../server/log/Log4j2HttpGetCommandProcessor.java  |  89 ++++++++
 .../server/log/Log4j2HttpPostCommandProcessor.java |  90 +++++++++
 .../src/test/resources/log4j2-test.properties      |  42 ++++
 .../src/test/resources/log4j2-test.properties      |  42 ++++
 tools/dependencies/known-dependencies.txt          |   8 +-
 71 files changed, 1215 insertions(+), 841 deletions(-)

diff --git a/config/log4j2.properties b/config/log4j2.properties
new file mode 100644
index 000000000..68ed30982
--- /dev/null
+++ b/config/log4j2.properties
@@ -0,0 +1,78 @@
+################################################################################
+#  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.
+################################################################################
+
+property.file_path = ${sys:seatunnel.logs.path:-/tmp/seatunnel/logs}
+property.file_name = ${sys:seatunnel.logs.file_name:-seatunnel}
+property.file_split_size = 100MB
+property.file_count = 100
+property.file_ttl = 7d
+
+rootLogger.level = INFO
+
+############################ log output to console 
#############################
+rootLogger.appenderRef.consoleStdout.ref = consoleStdoutAppender
+rootLogger.appenderRef.consoleStderr.ref = consoleStderrAppender
+############################ log output to console 
#############################
+############################ log output to file    
#############################
+#rootLogger.appenderRef.file.ref = fileAppender
+############################ log output to file    
#############################
+
+appender.consoleStdout.name = consoleStdoutAppender
+appender.consoleStdout.type = CONSOLE
+appender.consoleStdout.target = SYSTEM_OUT
+appender.consoleStdout.layout.type = PatternLayout
+appender.consoleStdout.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStdout.filter.acceptLtWarn.type = ThresholdFilter
+appender.consoleStdout.filter.acceptLtWarn.level = WARN
+appender.consoleStdout.filter.acceptLtWarn.onMatch = DENY
+appender.consoleStdout.filter.acceptLtWarn.onMismatch = ACCEPT
+
+appender.consoleStderr.name = consoleStderrAppender
+appender.consoleStderr.type = CONSOLE
+appender.consoleStderr.target = SYSTEM_ERR
+appender.consoleStderr.layout.type = PatternLayout
+appender.consoleStderr.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStderr.filter.acceptGteWarn.type = ThresholdFilter
+appender.consoleStderr.filter.acceptGteWarn.level = WARN
+appender.consoleStderr.filter.acceptGteWarn.onMatch = ACCEPT
+appender.consoleStderr.filter.acceptGteWarn.onMismatch = DENY
+
+appender.file.name = fileAppender
+appender.file.type = RollingFile
+appender.file.fileName = ${file_path}/${file_name}.log
+appender.file.filePattern = ${file_path}/${file_name}.log.%d{yyyy-MM-dd}-%i
+appender.file.append = true
+appender.file.layout.type = PatternLayout
+appender.file.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - %m%n
+appender.file.policies.type = Policies
+appender.file.policies.time.type = TimeBasedTriggeringPolicy
+appender.file.policies.time.modulate = true
+appender.file.policies.size.type = SizeBasedTriggeringPolicy
+appender.file.policies.size.size = ${file_split_size}
+appender.file.strategy.type = DefaultRolloverStrategy
+appender.file.strategy.fileIndex = nomax
+appender.file.strategy.action.type = Delete
+appender.file.strategy.action.basepath = ${file_path}
+appender.file.strategy.action.maxDepth = 1
+appender.file.strategy.action.condition.type = IfFileName
+appender.file.strategy.action.condition.glob = ${file_name}.log*
+appender.file.strategy.action.condition.nested_condition.type = IfAny
+appender.file.strategy.action.condition.nested_condition.lastModify.type = 
IfLastModified
+appender.file.strategy.action.condition.nested_condition.lastModify.age = 
${file_ttl}
+appender.file.strategy.action.condition.nested_condition.fileCount.type = 
IfAccumulatedFileCount
+appender.file.strategy.action.condition.nested_condition.fileCount.exceeds = 
${file_count}
diff --git a/pom.xml b/pom.xml
index 282e1bc28..4d1785317 100644
--- a/pom.xml
+++ b/pom.xml
@@ -144,11 +144,17 @@
         <scala.binary.version>2.11</scala.binary.version>
         <maven.compiler.source>${java.version}</maven.compiler.source>
         <maven.compiler.target>${java.version}</maven.compiler.target>
+
+        <slf4j.version>1.7.25</slf4j.version>
+        <log4j2.version>2.17.1</log4j2.version>
+        <log4j2-disruptor.version>3.4.4</log4j2-disruptor.version>
+        <log4j.version>1.2.17</log4j.version>
+        <logback.version>1.2.3</logback.version>
+        <commons-logging.version>1.2</commons-logging.version>
         <iceberg.version>0.13.1</iceberg.version>
         <flink.1.13.6.version>1.13.6</flink.1.13.6.version>
         <spark.2.4.0.version>2.4.0</spark.2.4.0.version>
         <spark.binary.2.4.version>2.4</spark.binary.2.4.version>
-        <commons.logging.version>1.2</commons.logging.version>
         <commons.beanutils.version>1.9.4</commons.beanutils.version>
         <commons.cli.version>1.4</commons.cli.version>
         <commons.configuration.version>1.7</commons.configuration.version>
@@ -198,6 +204,7 @@
         <maven-license-maven-plugin>1.20</maven-license-maven-plugin>
         <log4j-core.version>2.17.1</log4j-core.version>
         <docker-maven-plugin.version>0.38.0</docker-maven-plugin.version>
+        
<maven-dependency-plugin.version>3.1.1</maven-dependency-plugin.version>
         <p3c-pmd.version>1.3.0</p3c-pmd.version>
         
<maven-scm-provider-jgit.version>1.9.5</maven-scm-provider-jgit.version>
         <testcontainer.version>1.17.3</testcontainer.version>
@@ -205,7 +212,6 @@
         <skipUT>false</skipUT>
         <skipIT>true</skipIT>
         <elasticsearch>7</elasticsearch>
-        <slf4j.version>1.7.25</slf4j.version>
         <guava.version>19.0</guava.version>
         <auto-service.version>1.0.1</auto-service.version>
         <hadoop2.version>2.6.5</hadoop2.version>
@@ -219,6 +225,144 @@
 
     <dependencyManagement>
         <dependencies>
+            <!-- ***************** slf4j & provider & bridges start 
***************** -->
+            <!-- Declare slf4j-api -->
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-api</artifactId>
+                <version>${slf4j.version}</version>
+            </dependency>
+            <!-- Declare slf4j-api provider: log4j2.x -->
+            <dependency>
+                <groupId>org.apache.logging.log4j</groupId>
+                <artifactId>log4j-slf4j-impl</artifactId>
+                <version>${log4j2.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.logging.log4j</groupId>
+                <artifactId>log4j-api</artifactId>
+                <version>${log4j2.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.logging.log4j</groupId>
+                <artifactId>log4j-core</artifactId>
+                <version>${log4j2.version}</version>
+            </dependency>
+            <!-- Declare log4j2 asynchronous loggers provider: disruptor -->
+            <dependency>
+                <groupId>com.lmax</groupId>
+                <artifactId>disruptor</artifactId>
+                <version>${log4j2-disruptor.version}</version>
+            </dependency>
+            <!-- Include the logging bridges -->
+            <!-- commons-logging bridge to slf4j -->
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>jcl-over-slf4j</artifactId>
+                <version>${slf4j.version}</version>
+            </dependency>
+            <!-- jdk-logging bridge to slf4j -->
+            <!-- low performance, see: 
https://www.slf4j.org/legacy.html#jul-to-slf4j
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>jul-to-slf4j</artifactId>
+                <version>${slf4j.version}</version>
+            </dependency>
+            -->
+            <!-- log4j1.x bridge to log4j2.x -->
+            <dependency>
+                <groupId>org.apache.logging.log4j</groupId>
+                <artifactId>log4j-1.2-api</artifactId>
+                <version>${log4j2.version}</version>
+            </dependency>
+            <!-- Exclude the logging bridges via provided scope -->
+            <!-- log4j1.x bridge to slf4j
+                 Use of the SLF4J adapter (log4j-over-slf4j) together with the 
SLF4J bridge (slf4j-log4j12) should never be attempted as it will cause events 
to endlessly be routed between SLF4J and Log4j 1
+             -->
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>log4j-over-slf4j</artifactId>
+                <version>${slf4j.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <!-- slf4j binding to log4j1.x -->
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-log4j12</artifactId>
+                <version>${slf4j.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <!-- log4j2.x binding to slf4j.
+                 Use of the SLF4J adapter (log4j-to-slf4j-2.x.jar) together 
with the SLF4J bridge (log4j-slf4j-impl-2.x.jar) should never be attempted as 
it will cause events to endlessly be routed between SLF4J and Log4j 2
+            -->
+            <dependency>
+                <groupId>org.apache.logging.log4j</groupId>
+                <artifactId>log4j-to-slf4j</artifactId>
+                <version>${log4j2.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <!-- slf4j binding to jdk-logging -->
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-jdk14</artifactId>
+                <version>${slf4j.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <!-- slf4j binding to commons-logging -->
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-jcl</artifactId>
+                <version>${slf4j.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <!-- slf4j binding to nop -->
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-nop</artifactId>
+                <version>${slf4j.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <!-- slf4j binding to simple -->
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-simple</artifactId>
+                <version>${slf4j.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <!-- slf4j binding to reload4j -->
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-reload4j</artifactId>
+                <version>${slf4j.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <!-- Exclude other logging provider via provided scope -->
+            <dependency>
+                <groupId>commons-logging</groupId>
+                <artifactId>commons-logging</artifactId>
+                <version>${commons-logging.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>log4j</groupId>
+                <artifactId>log4j</artifactId>
+                <version>${log4j.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>ch.qos.logback</groupId>
+                <artifactId>logback-classic</artifactId>
+                <version>${logback.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>ch.qos.logback</groupId>
+                <artifactId>logback-core</artifactId>
+                <version>${logback.version}</version>
+                <scope>provided</scope>
+            </dependency>
+            <!-- ***************** slf4j & provider & bridges end 
***************** -->
+
             <dependency>
                 <groupId>org.apache.seatunnel</groupId>
                 <artifactId>seatunnel-config-shade</artifactId>
@@ -239,6 +383,10 @@
                         <groupId>xml-apis</groupId>
                         <artifactId>xml-apis</artifactId>
                     </exclusion>
+                    <exclusion>
+                        <groupId>org.slf4j</groupId>
+                        <artifactId>slf4j-log4j12</artifactId>
+                    </exclusion>
                 </exclusions>
             </dependency>
 
@@ -315,11 +463,6 @@
                 </exclusions>
             </dependency>
 
-            <dependency>
-                <groupId>org.apache.logging.log4j</groupId>
-                <artifactId>log4j-core</artifactId>
-                <version>${log4j-core.version}</version>
-            </dependency>
             <dependency>
                 <groupId>com.typesafe</groupId>
                 <artifactId>config</artifactId>
@@ -338,24 +481,6 @@
                 <version>${guava.version}</version>
             </dependency>
 
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-api</artifactId>
-                <version>${slf4j.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-log4j12</artifactId>
-                <version>${slf4j.version}</version>
-            </dependency>
-
-            <dependency>
-                <groupId>commons-logging</groupId>
-                <artifactId>commons-logging</artifactId>
-                <version>${commons.logging.version}</version>
-            </dependency>
-
             <dependency>
                 <groupId>org.checkerframework</groupId>
                 <artifactId>checker-qual</artifactId>
@@ -409,16 +534,34 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+
+        <!-- ***************** slf4j & provider & bridges start 
***************** -->
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
-            <version>${slf4j.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-slf4j-impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-core</artifactId>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <version>${slf4j.version}</version>
+            <artifactId>jcl-over-slf4j</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.logging.log4j</groupId>
+            <artifactId>log4j-1.2-api</artifactId>
         </dependency>
+        <!-- ***************** slf4j & provider & bridges end 
***************** -->
+
         <dependency>
             <groupId>org.junit.jupiter</groupId>
             <artifactId>junit-jupiter-engine</artifactId>
@@ -463,6 +606,23 @@
                         <excludes>
                             <exclude>**/*IT.java</exclude>
                         </excludes>
+                        <classpathDependencyExcludes>
+                            <!--
+                                The logger provider & bridges declared under 
'provided' scope should be explicitly excluded from testing as below.
+                            -->
+                            
<classpathDependencyExclude>org.slf4j:slf4j-jdk14</classpathDependencyExclude>
+                            
<classpathDependencyExclude>org.slf4j:slf4j-jcl</classpathDependencyExclude>
+                            
<classpathDependencyExclude>org.slf4j:slf4j-nop</classpathDependencyExclude>
+                            
<classpathDependencyExclude>org.slf4j:slf4j-simple</classpathDependencyExclude>
+                            
<classpathDependencyExclude>org.slf4j:slf4j-reload4j</classpathDependencyExclude>
+                            
<classpathDependencyExclude>org.slf4j:slf4j-log4j12</classpathDependencyExclude>
+                            
<classpathDependencyExclude>org.slf4j:log4j-over-slf4j</classpathDependencyExclude>
+                            
<classpathDependencyExclude>commons-logging:commons-logging</classpathDependencyExclude>
+                            
<classpathDependencyExclude>log4j:log4j</classpathDependencyExclude>
+                            
<classpathDependencyExclude>ch.qos.logback:logback-classic</classpathDependencyExclude>
+                            
<classpathDependencyExclude>ch.qos.logback:logback-core</classpathDependencyExclude>
+                            
<classpathDependencyExclude>org.apache.logging.log4j:log4j-to-slf4j</classpathDependencyExclude>
+                        </classpathDependencyExcludes>
                     </configuration>
                 </plugin>
                 <plugin>
@@ -503,6 +663,8 @@
                                 <exclude>org.slf4j:*</exclude>
                                 <exclude>ch.qos.logback:*</exclude>
                                 <exclude>log4j:*</exclude>
+                                <exclude>org.apache.logging.log4j:*</exclude>
+                                <exclude>commons-logging:*</exclude>
                             </excludes>
                         </artifactSet>
                         <filters>
@@ -670,6 +832,11 @@
                         </execution>
                     </executions>
                 </plugin>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-dependency-plugin</artifactId>
+                    <version>${maven-dependency-plugin.version}</version>
+                </plugin>
             </plugins>
         </pluginManagement>
 
diff --git a/seatunnel-core/pom.xml b/seatunnel-core/pom.xml
index fbbd64a6e..bd8797aac 100644
--- a/seatunnel-core/pom.xml
+++ b/seatunnel-core/pom.xml
@@ -42,22 +42,28 @@
     </modules>
 
     <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <configuration>
-                    <shadedArtifactAttached>false</shadedArtifactAttached>
-                    
<createDependencyReducedPom>true</createDependencyReducedPom>
-                    <!-- Make sure the transitive dependencies are written to 
the generated pom under <dependencies> -->
-                    
<promoteTransitiveDependencies>true</promoteTransitiveDependencies>
-                    <artifactSet>
-                        <excludes>
-                            <exclude>ch.qos.logback:*</exclude>
-                        </excludes>
-                    </artifactSet>
-                </configuration>
-            </plugin>
-        </plugins>
+        <pluginManagement>
+            <plugins>
+                <plugin>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-dependency-plugin</artifactId>
+                    <executions>
+                        <execution>
+                            <id>copy-starter-logging-package-for-e2e</id>
+                            <phase>package</phase>
+                            <goals>
+                                <goal>copy-dependencies</goal>
+                            </goals>
+                            <configuration>
+                                <excludeTransitive>false</excludeTransitive>
+                                
<includeGroupIds>org.slf4j,org.apache.logging.log4j</includeGroupIds>
+                                
<includeArtifactIds>slf4j-api,jcl-over-slf4j,log4j-slf4j-impl,log4j-api,log4j-core</includeArtifactIds>
+                                
<outputDirectory>${project.build.directory}/logging-e2e</outputDirectory>
+                            </configuration>
+                        </execution>
+                    </executions>
+                </plugin>
+            </plugins>
+        </pluginManagement>
     </build>
 </project>
diff --git a/seatunnel-core/seatunnel-core-base/pom.xml 
b/seatunnel-core/seatunnel-core-base/pom.xml
index 1a35764eb..7852932d0 100644
--- a/seatunnel-core/seatunnel-core-base/pom.xml
+++ b/seatunnel-core/seatunnel-core-base/pom.xml
@@ -61,25 +61,4 @@
             <artifactId>jcommander</artifactId>
         </dependency>
     </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <!-- base module need skip shading -->
-                        <configuration>
-                            <skip>true</skip>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/seatunnel-core/seatunnel-core-flink-sql/pom.xml 
b/seatunnel-core/seatunnel-core-flink-sql/pom.xml
index 39c93e333..a8bbe3ed7 100644
--- a/seatunnel-core/seatunnel-core-flink-sql/pom.xml
+++ b/seatunnel-core/seatunnel-core-flink-sql/pom.xml
@@ -60,5 +60,48 @@
 
     <build>
         <finalName>${project.name}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <configuration>
+                    <artifactSet>
+                        <excludes>
+                            <!--
+                                not excluded:
+                                    jcl-over-slf4j(commons-logging to slf4j 
bridge)
+
+                                Flink server lib already include:
+                                    slf4j-api
+                                    log4j-api
+                                    log4j-core
+                                    log4j-slf4j-impl
+                                    log4j-1.2-api
+                            -->
+                            <exclude>org.slf4j:slf4j-api</exclude>
+                            <exclude>org.slf4j:slf4j-jdk14</exclude>
+                            <exclude>org.slf4j:slf4j-jcl</exclude>
+                            <exclude>org.slf4j:slf4j-nop</exclude>
+                            <exclude>org.slf4j:slf4j-simple</exclude>
+                            <exclude>org.slf4j:slf4j-reload4j</exclude>
+                            <exclude>org.slf4j:slf4j-log4j12</exclude>
+                            <exclude>org.slf4j:log4j-over-slf4j</exclude>
+                            <exclude>log4j:*</exclude>
+                            <exclude>commons-logging:*</exclude>
+                            <exclude>ch.qos.logback:*</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-api</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-core</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-slf4j-impl</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-1.2-api</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-to-slf4j</exclude>
+                        </excludes>
+                    </artifactSet>
+                </configuration>
+            </plugin>
+        </plugins>
     </build>
 </project>
diff --git 
a/seatunnel-core/seatunnel-core-flink-sql/src/main/bin/start-seatunnel-sql.sh 
b/seatunnel-core/seatunnel-core-flink-sql/src/main/bin/start-seatunnel-sql.sh
index 5071144c7..f4ef162f9 100755
--- 
a/seatunnel-core/seatunnel-core-flink-sql/src/main/bin/start-seatunnel-sql.sh
+++ 
b/seatunnel-core/seatunnel-core-flink-sql/src/main/bin/start-seatunnel-sql.sh
@@ -50,15 +50,24 @@ else
     args=$@
 fi
 
+set +u
+# Log4j2 Config
+if [ -e "${CONF_DIR}/log4j2.properties" ]; then
+  JAVA_OPTS="${JAVA_OPTS} 
-Dlog4j2.configurationFile=${CONF_DIR}/log4j2.properties"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.path=${APP_DIR}/logs"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.file_name=seatunnel-core-flink-sql"
+fi
+
+CLASS_PATH=${APP_DIR}/starter/logging/*:${APP_JAR}
 
-CMD=$(java -cp ${APP_JAR} ${APP_MAIN} ${args}) && EXIT_CODE=$? || EXIT_CODE=$?
+CMD=$(java ${JAVA_OPTS} -cp ${CLASS_PATH} ${APP_MAIN} ${args}) && EXIT_CODE=$? 
|| EXIT_CODE=$?
 if [ ${EXIT_CODE} -eq 234 ]; then
     # print usage
     echo "${CMD}"
     exit 0
 elif [ ${EXIT_CODE} -eq 0 ]; then
-    echo "Execute SeaTunnel Flink SQL Job: ${CMD}"
-    eval ${CMD}
+    echo "Execute SeaTunnel Flink SQL Job: $(echo "${CMD}" | tail -n 1)"
+    eval $(echo "${CMD}" | tail -n 1)
 else
     echo "${CMD}"
     exit ${EXIT_CODE}
diff --git a/seatunnel-core/seatunnel-core-flink/pom.xml 
b/seatunnel-core/seatunnel-core-flink/pom.xml
index 4be9326ca..60011f655 100644
--- a/seatunnel-core/seatunnel-core-flink/pom.xml
+++ b/seatunnel-core/seatunnel-core-flink/pom.xml
@@ -106,6 +106,49 @@
 
     <build>
         <finalName>${project.name}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <configuration>
+                    <artifactSet>
+                        <excludes>
+                            <!--
+                                not excluded:
+                                    jcl-over-slf4j(commons-logging to slf4j 
bridge)
+
+                                Flink server lib already include:
+                                    slf4j-api
+                                    log4j-api
+                                    log4j-core
+                                    log4j-slf4j-impl
+                                    log4j-1.2-api
+                            -->
+                            <exclude>org.slf4j:slf4j-api</exclude>
+                            <exclude>org.slf4j:slf4j-jdk14</exclude>
+                            <exclude>org.slf4j:slf4j-jcl</exclude>
+                            <exclude>org.slf4j:slf4j-nop</exclude>
+                            <exclude>org.slf4j:slf4j-simple</exclude>
+                            <exclude>org.slf4j:slf4j-reload4j</exclude>
+                            <exclude>org.slf4j:slf4j-log4j12</exclude>
+                            <exclude>org.slf4j:log4j-over-slf4j</exclude>
+                            <exclude>log4j:*</exclude>
+                            <exclude>commons-logging:*</exclude>
+                            <exclude>ch.qos.logback:*</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-api</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-core</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-slf4j-impl</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-1.2-api</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-to-slf4j</exclude>
+                        </excludes>
+                    </artifactSet>
+                </configuration>
+            </plugin>
+        </plugins>
     </build>
 
     <profiles>
diff --git 
a/seatunnel-core/seatunnel-core-flink/src/main/bin/start-seatunnel-flink.sh 
b/seatunnel-core/seatunnel-core-flink/src/main/bin/start-seatunnel-flink.sh
index 21c2a3c9d..4e9a34c6c 100755
--- a/seatunnel-core/seatunnel-core-flink/src/main/bin/start-seatunnel-flink.sh
+++ b/seatunnel-core/seatunnel-core-flink/src/main/bin/start-seatunnel-flink.sh
@@ -51,23 +51,33 @@ else
     args=$@
 fi
 
-ENV_PARAMETERS_OR_ERROR=$(java -cp ${APP_JAR} ${ENV_PARAMETERS_MAIN} ${args}) 
&& EXIT_CODE=$? || EXIT_CODE=$?
+set +u
+# Log4j2 Config
+if [ -e "${CONF_DIR}/log4j2.properties" ]; then
+  JAVA_OPTS="${JAVA_OPTS} 
-Dlog4j2.configurationFile=${CONF_DIR}/log4j2.properties"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.path=${APP_DIR}/logs"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.file_name=seatunnel-core-flink"
+fi
+
+CLASS_PATH=${APP_DIR}/starter/logging/*:${APP_JAR}
+
+ENV_PARAMETERS_OR_ERROR=$(java ${JAVA_OPTS} -cp ${CLASS_PATH} 
${ENV_PARAMETERS_MAIN} ${args}) && EXIT_CODE=$? || EXIT_CODE=$?
 if [ ${EXIT_CODE} -eq 0 ]; then
-  echo "Export JVM_ARGS: ${ENV_PARAMETERS_OR_ERROR}"
-  export JVM_ARGS="${ENV_PARAMETERS_OR_ERROR}"
+  echo "Export JVM_ARGS: $(echo "${ENV_PARAMETERS_OR_ERROR}" | tail -n 1)"
+  export JVM_ARGS="$(echo "${ENV_PARAMETERS_OR_ERROR}" | tail -n 1)"
 else
     echo "${ENV_PARAMETERS_OR_ERROR}"
     exit ${EXIT_CODE}
 fi
 
-CMD=$(java -cp ${APP_JAR} ${APP_MAIN} ${args}) && EXIT_CODE=$? || EXIT_CODE=$?
+CMD=$(java ${JAVA_OPTS} -cp ${CLASS_PATH} ${APP_MAIN} ${args}) && EXIT_CODE=$? 
|| EXIT_CODE=$?
 if [ ${EXIT_CODE} -eq 234 ]; then
     # print usage
     echo "${CMD}"
     exit 0
 elif [ ${EXIT_CODE} -eq 0 ]; then
-    echo "Execute SeaTunnel Flink Job: ${CMD}"
-    eval ${CMD}
+    echo "Execute SeaTunnel Flink Job: $(echo "${CMD}" | tail -n 1)"
+    eval $(echo "${CMD}" | tail -n 1)
 else
     echo "${CMD}"
     exit ${EXIT_CODE}
diff --git a/seatunnel-core/seatunnel-core-spark/pom.xml 
b/seatunnel-core/seatunnel-core-spark/pom.xml
index fa92953dc..9dbaab569 100644
--- a/seatunnel-core/seatunnel-core-spark/pom.xml
+++ b/seatunnel-core/seatunnel-core-spark/pom.xml
@@ -129,6 +129,58 @@
 
     <build>
         <finalName>${project.name}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <configuration>
+                    <artifactSet>
+                        <excludes>
+                            <!--
+                                Spark(2.x) server lib already include:
+                                    slf4j-api
+                                    log4j
+                                    slf4j-log4j12
+                                    jul-to-slf4j
+                                    jcl-over-slf4j
+
+                                Spark(3.x) server lib already include:
+                                    slf4j-api
+                                    log4j-api
+                                    log4j-core
+                                    log4j-slf4j-impl
+                                    log4j-1.2-api
+                                    jul-to-slf4j
+                                    jcl-over-slf4j
+                            -->
+                            <exclude>org.slf4j:slf4j-api</exclude>
+                            <exclude>org.slf4j:slf4j-jdk14</exclude>
+                            <exclude>org.slf4j:slf4j-jcl</exclude>
+                            <exclude>org.slf4j:slf4j-nop</exclude>
+                            <exclude>org.slf4j:slf4j-simple</exclude>
+                            <exclude>org.slf4j:slf4j-reload4j</exclude>
+                            <exclude>org.slf4j:slf4j-log4j12</exclude>
+                            <exclude>org.slf4j:jcl-over-slf4j</exclude>
+                            <exclude>org.slf4j:jul-to-slf4j</exclude>
+                            <!-- spark2.x use slf4j + log4j1.x -->
+                            <exclude>org.slf4j:log4j-over-slf4j</exclude>
+                            <exclude>log4j:*</exclude>
+                            <exclude>commons-logging:*</exclude>
+                            <exclude>ch.qos.logback:*</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-api</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-core</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-slf4j-impl</exclude>
+                            <!-- spark3.x use slf4j + log4j2.x -->
+                            
<exclude>org.apache.logging.log4j:log4j-to-slf4j</exclude>
+                        </excludes>
+                    </artifactSet>
+                </configuration>
+            </plugin>
+        </plugins>
     </build>
 
     <profiles>
diff --git 
a/seatunnel-core/seatunnel-core-spark/src/main/bin/start-seatunnel-spark.sh 
b/seatunnel-core/seatunnel-core-spark/src/main/bin/start-seatunnel-spark.sh
index c656755a9..9328dfe24 100755
--- a/seatunnel-core/seatunnel-core-spark/src/main/bin/start-seatunnel-spark.sh
+++ b/seatunnel-core/seatunnel-core-spark/src/main/bin/start-seatunnel-spark.sh
@@ -49,14 +49,24 @@ else
     args=$@
 fi
 
-CMD=$(java -cp ${APP_JAR} ${APP_MAIN} ${args}) && EXIT_CODE=$? || EXIT_CODE=$?
+set +u
+# Log4j2 Config
+if [ -e "${CONF_DIR}/log4j2.properties" ]; then
+  JAVA_OPTS="${JAVA_OPTS} 
-Dlog4j2.configurationFile=${CONF_DIR}/log4j2.properties"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.path=${APP_DIR}/logs"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.file_name=seatunnel-core-spark"
+fi
+
+CLASS_PATH=${APP_DIR}/starter/logging/*:${APP_JAR}
+
+CMD=$(java ${JAVA_OPTS} -cp ${CLASS_PATH} ${APP_MAIN} ${args}) && EXIT_CODE=$? 
|| EXIT_CODE=$?
 if [ ${EXIT_CODE} -eq 234 ]; then
     # print usage
     echo "${CMD}"
     exit 0
 elif [ ${EXIT_CODE} -eq 0 ]; then
-    echo "Execute SeaTunnel Spark Job: $(echo ${CMD} | tail -n 1)"
-    eval $(echo ${CMD} | tail -n 1)
+    echo "Execute SeaTunnel Spark Job: $(echo "${CMD}" | tail -n 1)"
+    eval $(echo "${CMD}" | tail -n 1)
 else
     echo "${CMD}"
     exit ${EXIT_CODE}
diff --git a/seatunnel-core/seatunnel-core-starter/pom.xml 
b/seatunnel-core/seatunnel-core-starter/pom.xml
index b000ea0a9..be2484541 100644
--- a/seatunnel-core/seatunnel-core-starter/pom.xml
+++ b/seatunnel-core/seatunnel-core-starter/pom.xml
@@ -60,25 +60,4 @@
             <artifactId>jcommander</artifactId>
         </dependency>
     </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-shade-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>shade</goal>
-                        </goals>
-                        <!-- base module need skip shading -->
-                        <configuration>
-                            <skip>true</skip>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
 </project>
diff --git a/seatunnel-core/seatunnel-flink-starter/pom.xml 
b/seatunnel-core/seatunnel-flink-starter/pom.xml
index a34426b12..872ec1f30 100644
--- a/seatunnel-core/seatunnel-flink-starter/pom.xml
+++ b/seatunnel-core/seatunnel-flink-starter/pom.xml
@@ -101,6 +101,49 @@
 
     <build>
         <finalName>${project.name}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <configuration>
+                    <artifactSet>
+                        <excludes>
+                            <!--
+                                not excluded:
+                                    jcl-over-slf4j(commons-logging to slf4j 
bridge)
+
+                                Flink server lib already include:
+                                    slf4j-api
+                                    log4j-api
+                                    log4j-core
+                                    log4j-slf4j-impl
+                                    log4j-1.2-api
+                            -->
+                            <exclude>org.slf4j:slf4j-api</exclude>
+                            <exclude>org.slf4j:slf4j-jdk14</exclude>
+                            <exclude>org.slf4j:slf4j-jcl</exclude>
+                            <exclude>org.slf4j:slf4j-nop</exclude>
+                            <exclude>org.slf4j:slf4j-simple</exclude>
+                            <exclude>org.slf4j:slf4j-reload4j</exclude>
+                            <exclude>org.slf4j:slf4j-log4j12</exclude>
+                            <exclude>org.slf4j:log4j-over-slf4j</exclude>
+                            <exclude>log4j:*</exclude>
+                            <exclude>commons-logging:*</exclude>
+                            <exclude>ch.qos.logback:*</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-api</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-core</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-slf4j-impl</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-1.2-api</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-to-slf4j</exclude>
+                        </excludes>
+                    </artifactSet>
+                </configuration>
+            </plugin>
+        </plugins>
     </build>
 
     <profiles>
diff --git 
a/seatunnel-core/seatunnel-flink-starter/src/main/bin/start-seatunnel-flink-connector-v2.sh
 
b/seatunnel-core/seatunnel-flink-starter/src/main/bin/start-seatunnel-flink-connector-v2.sh
index e817e1f7d..706776cd4 100755
--- 
a/seatunnel-core/seatunnel-flink-starter/src/main/bin/start-seatunnel-flink-connector-v2.sh
+++ 
b/seatunnel-core/seatunnel-flink-starter/src/main/bin/start-seatunnel-flink-connector-v2.sh
@@ -50,14 +50,24 @@ else
     args=$@
 fi
 
-CMD=$(java -cp ${APP_JAR} ${APP_MAIN} ${args}) && EXIT_CODE=$? || EXIT_CODE=$?
+set +u
+# Log4j2 Config
+if [ -e "${CONF_DIR}/log4j2.properties" ]; then
+  JAVA_OPTS="${JAVA_OPTS} 
-Dlog4j2.configurationFile=${CONF_DIR}/log4j2.properties"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.path=${APP_DIR}/logs"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.file_name=seatunnel-flink-starter"
+fi
+
+CLASS_PATH=${APP_DIR}/starter/logging/*:${APP_JAR}
+
+CMD=$(java ${JAVA_OPTS} -cp ${CLASS_PATH} ${APP_MAIN} ${args}) && EXIT_CODE=$? 
|| EXIT_CODE=$?
 if [ ${EXIT_CODE} -eq 234 ]; then
     # print usage
     echo "${CMD}"
     exit 0
 elif [ ${EXIT_CODE} -eq 0 ]; then
-    echo "Execute SeaTunnel Flink Job: ${CMD}"
-    eval ${CMD}
+    echo "Execute SeaTunnel Flink Job: $(echo "${CMD}" | tail -n 1)"
+    eval $(echo "${CMD}" | tail -n 1)
 else
     echo "${CMD}"
     exit ${EXIT_CODE}
diff --git a/seatunnel-core/seatunnel-spark-starter/pom.xml 
b/seatunnel-core/seatunnel-spark-starter/pom.xml
index 91dfbf939..7ff006fac 100644
--- a/seatunnel-core/seatunnel-spark-starter/pom.xml
+++ b/seatunnel-core/seatunnel-spark-starter/pom.xml
@@ -105,6 +105,58 @@
 
     <build>
         <finalName>${project.name}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <configuration>
+                    <artifactSet>
+                        <excludes>
+                            <!--
+                                Spark(2.x) server lib already include:
+                                    slf4j-api
+                                    log4j
+                                    slf4j-log4j12
+                                    jul-to-slf4j
+                                    jcl-over-slf4j
+
+                                Spark(3.x) server lib already include:
+                                    slf4j-api
+                                    log4j-api
+                                    log4j-core
+                                    log4j-slf4j-impl
+                                    log4j-1.2-api
+                                    jul-to-slf4j
+                                    jcl-over-slf4j
+                            -->
+                            <exclude>org.slf4j:slf4j-api</exclude>
+                            <exclude>org.slf4j:slf4j-jdk14</exclude>
+                            <exclude>org.slf4j:slf4j-jcl</exclude>
+                            <exclude>org.slf4j:slf4j-nop</exclude>
+                            <exclude>org.slf4j:slf4j-simple</exclude>
+                            <exclude>org.slf4j:slf4j-reload4j</exclude>
+                            <exclude>org.slf4j:slf4j-log4j12</exclude>
+                            <exclude>org.slf4j:jcl-over-slf4j</exclude>
+                            <exclude>org.slf4j:jul-to-slf4j</exclude>
+                            <!-- spark2.x use slf4j + log4j1.x -->
+                            <exclude>org.slf4j:log4j-over-slf4j</exclude>
+                            <exclude>log4j:*</exclude>
+                            <exclude>commons-logging:*</exclude>
+                            <exclude>ch.qos.logback:*</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-api</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-core</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-slf4j-impl</exclude>
+                            <!-- spark3.x use slf4j + log4j2.x -->
+                            
<exclude>org.apache.logging.log4j:log4j-to-slf4j</exclude>
+                        </excludes>
+                    </artifactSet>
+                </configuration>
+            </plugin>
+        </plugins>
     </build>
 
     <!-- todo <profiles>
diff --git 
a/seatunnel-core/seatunnel-spark-starter/src/main/bin/start-seatunnel-spark-connector-v2.sh
 
b/seatunnel-core/seatunnel-spark-starter/src/main/bin/start-seatunnel-spark-connector-v2.sh
index 3fee18158..b830b5b0e 100755
--- 
a/seatunnel-core/seatunnel-spark-starter/src/main/bin/start-seatunnel-spark-connector-v2.sh
+++ 
b/seatunnel-core/seatunnel-spark-starter/src/main/bin/start-seatunnel-spark-connector-v2.sh
@@ -50,14 +50,24 @@ else
     args=$@
 fi
 
-CMD=$(java -cp ${APP_JAR} ${APP_MAIN} ${args}) && EXIT_CODE=$? || EXIT_CODE=$?
+set +u
+# Log4j2 Config
+if [ -e "${CONF_DIR}/log4j2.properties" ]; then
+  JAVA_OPTS="${JAVA_OPTS} 
-Dlog4j2.configurationFile=${CONF_DIR}/log4j2.properties"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.path=${APP_DIR}/logs"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.file_name=seatunnel-spark-starter"
+fi
+
+CLASS_PATH=${APP_DIR}/starter/logging/*:${APP_JAR}
+
+CMD=$(java ${JAVA_OPTS} -cp ${CLASS_PATH} ${APP_MAIN} ${args}) && EXIT_CODE=$? 
|| EXIT_CODE=$?
 if [ ${EXIT_CODE} -eq 234 ]; then
     # print usage
     echo "${CMD}"
     exit 0
 elif [ ${EXIT_CODE} -eq 0 ]; then
-    echo "Execute SeaTunnel Spark Job: $(echo ${CMD} | tail -n 1)"
-    eval $(echo ${CMD} | tail -n 1)
+    echo "Execute SeaTunnel Spark Job: $(echo "${CMD}" | tail -n 1)"
+    eval $(echo "${CMD}" | tail -n 1)
 else
     echo "${CMD}"
     exit ${EXIT_CODE}
diff --git a/seatunnel-core/seatunnel-starter/pom.xml 
b/seatunnel-core/seatunnel-starter/pom.xml
index 81dccddaf..3b3e1c384 100644
--- a/seatunnel-core/seatunnel-starter/pom.xml
+++ b/seatunnel-core/seatunnel-starter/pom.xml
@@ -52,10 +52,51 @@
             <artifactId>seatunnel-engine-server</artifactId>
             <version>${project.version}</version>
         </dependency>
+
+        <!-- logger provider & bridges -->
+        <!-- Declare log4j2 asynchronous loggers provider: disruptor -->
+        <dependency>
+            <groupId>com.lmax</groupId>
+            <artifactId>disruptor</artifactId>
+        </dependency>
+        <!-- logger provider & bridges -->
+
     </dependencies>
 
     <build>
         <finalName>${project.name}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <configuration>
+                    <artifactSet>
+                        <excludes>
+                            <!--
+                                not excluded:
+                                    slf4j-api
+                                    log4j2-api
+                                    log4j2-core
+                                    log4j-slf4j-impl
+                                    log4j-1.2-api(log4j1.x to log4j2.x bridge)
+                                    jcl-over-slf4j(commons-logging to slf4j 
bridge)
+                            -->
+                            <exclude>org.slf4j:slf4j-jdk14</exclude>
+                            <exclude>org.slf4j:slf4j-jcl</exclude>
+                            <exclude>org.slf4j:slf4j-nop</exclude>
+                            <exclude>org.slf4j:slf4j-simple</exclude>
+                            <exclude>org.slf4j:slf4j-reload4j</exclude>
+                            <exclude>org.slf4j:slf4j-log4j12</exclude>
+                            <exclude>org.slf4j:log4j-over-slf4j</exclude>
+                            <exclude>log4j:*</exclude>
+                            <exclude>commons-logging:*</exclude>
+                            <exclude>ch.qos.logback:*</exclude>
+                            
<exclude>org.apache.logging.log4j:log4j-to-slf4j</exclude>
+                        </excludes>
+                    </artifactSet>
+                </configuration>
+            </plugin>
+        </plugins>
     </build>
 
 </project>
\ No newline at end of file
diff --git a/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel-cluster.sh 
b/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel-cluster.sh
index 4d7758be1..97b2a8f81 100755
--- a/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel-cluster.sh
+++ b/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel-cluster.sh
@@ -63,6 +63,16 @@ fi
 JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.config=${SEATUNNEL_CONFIG}"
 JAVA_OPTS="${JAVA_OPTS} -Dhazelcast.config=${HAZELCAST_CONFIG}"
 
+# Log4j2 Config
+JAVA_OPTS="${JAVA_OPTS} 
-Dlog4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector"
+if [ -e "${CONF_DIR}/log4j2.properties" ]; then
+  JAVA_OPTS="${JAVA_OPTS} 
-Dlog4j2.configurationFile=${CONF_DIR}/log4j2.properties"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.path=${APP_DIR}/logs"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.file_name=seatunnel-starter-server"
+fi
+
+echo "JAVA_OPTS: ${JAVA_OPTS}"
+
 CLASS_PATH=${APP_DIR}/lib/*:${APP_JAR}
 
 java ${JAVA_OPTS} -cp ${CLASS_PATH} ${APP_MAIN} ${args}
diff --git a/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel.sh 
b/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel.sh
index 3b0c64820..7bf8fa0a8 100755
--- a/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel.sh
+++ b/seatunnel-core/seatunnel-starter/src/main/bin/seatunnel.sh
@@ -68,6 +68,19 @@ JAVA_OPTS="${JAVA_OPTS} 
-Dhazelcast.client.config=${HAZELCAST_CLIENT_CONFIG}"
 JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.config=${SEATUNNEL_CONFIG}"
 JAVA_OPTS="${JAVA_OPTS} -Dhazelcast.config=${HAZELCAST_CONFIG}"
 
+# Log4j2 Config
+if [ -e "${CONF_DIR}/log4j2.properties" ]; then
+  JAVA_OPTS="${JAVA_OPTS} 
-Dlog4j2.configurationFile=${CONF_DIR}/log4j2.properties"
+  JAVA_OPTS="${JAVA_OPTS} -Dseatunnel.logs.path=${APP_DIR}/logs"
+  if [[ $args == *" -e local"* || $args == *" --deploy-mode local"* ]]; then
+    JAVA_OPTS="${JAVA_OPTS} 
-Dseatunnel.logs.file_name=seatunnel-starter-client-$((`date '+%s'`*1000+`date 
'+%N'`/1000000))"
+  else
+      JAVA_OPTS="${JAVA_OPTS} 
-Dseatunnel.logs.file_name=seatunnel-starter-client"
+  fi
+fi
+
+echo "JAVA_OPTS: ${JAVA_OPTS}"
+
 CLASS_PATH=${APP_DIR}/lib/*:${APP_JAR}
 
 java ${JAVA_OPTS} -cp ${CLASS_PATH} ${APP_MAIN} ${args}
diff --git 
a/seatunnel-core/seatunnel-starter/src/main/resources/log4j2.properties 
b/seatunnel-core/seatunnel-starter/src/main/resources/log4j2.properties
new file mode 100644
index 000000000..2dc1b8ca5
--- /dev/null
+++ b/seatunnel-core/seatunnel-starter/src/main/resources/log4j2.properties
@@ -0,0 +1,42 @@
+################################################################################
+#  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.
+################################################################################
+
+rootLogger.level = INFO
+
+rootLogger.appenderRef.consoleStdout.ref = consoleStdoutAppender
+rootLogger.appenderRef.consoleStderr.ref = consoleStderrAppender
+
+appender.consoleStdout.name = consoleStdoutAppender
+appender.consoleStdout.type = CONSOLE
+appender.consoleStdout.target = SYSTEM_OUT
+appender.consoleStdout.layout.type = PatternLayout
+appender.consoleStdout.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStdout.filter.acceptLtWarn.type = ThresholdFilter
+appender.consoleStdout.filter.acceptLtWarn.level = WARN
+appender.consoleStdout.filter.acceptLtWarn.onMatch = DENY
+appender.consoleStdout.filter.acceptLtWarn.onMismatch = ACCEPT
+
+appender.consoleStderr.name = consoleStderrAppender
+appender.consoleStderr.type = CONSOLE
+appender.consoleStderr.target = SYSTEM_ERR
+appender.consoleStderr.layout.type = PatternLayout
+appender.consoleStderr.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStderr.filter.acceptGteWarn.type = ThresholdFilter
+appender.consoleStderr.filter.acceptGteWarn.level = WARN
+appender.consoleStderr.filter.acceptGteWarn.onMatch = ACCEPT
+appender.consoleStderr.filter.acceptGteWarn.onMismatch = DENY
diff --git a/seatunnel-dist/release-docs/LICENSE 
b/seatunnel-dist/release-docs/LICENSE
index e6fa2de77..9aed11646 100644
--- a/seatunnel-dist/release-docs/LICENSE
+++ b/seatunnel-dist/release-docs/LICENSE
@@ -277,7 +277,10 @@ The text of each license is the standard Apache 2.0 
license.
      (The Apache Software License, Version 2.0) Data Mapper for Jackson 
(org.codehaus.jackson:jackson-mapper-asl:1.9.13 - http://jackson.codehaus.org)
      (Apache License, Version 2.0) jcommander (com.beust:jcommander:1.81 - 
https://jcommander.org)
      (The Apache Software License, Version 2.0) FindBugs-jsr305 
(com.google.code.findbugs:jsr305:1.3.9 - http://findbugs.sourceforge.net/)
-     (The Apache Software License, Version 2.0) Apache Log4j 
(log4j:log4j:1.2.17 - http://logging.apache.org/log4j/1.2/)
+     (The Apache Software License, Version 2.0) Apache Log4j 
(org.apache.logging.log4j:log4j-api:2.17.1 - 
https://logging.apache.org/log4j/2.x/)
+     (The Apache Software License, Version 2.0) Apache Log4j 
(org.apache.logging.log4j:log4j-core:2.17.1 - 
https://logging.apache.org/log4j/2.x/)
+     (The Apache Software License, Version 2.0) Apache Log4j 
(org.apache.logging.log4j:log4j-slf4j-impl:2.17.1 - 
https://logging.apache.org/log4j/2.x/)
+     (The Apache Software License, Version 2.0) Apache Log4j 
(org.apache.logging.log4j:log4j-1.2-api:2.17.1 - 
https://logging.apache.org/log4j/2.x/)
      (The Apache Software License, Version 2.0) LZ4 and xxHash 
(net.jpountz.lz4:lz4:1.3.0 - https://github.com/jpountz/lz4-java)
      (The Apache Software License, Version 2.0) LZ4 and xxHash 
(org.lz4:lz4-java:1.6.0 - https://github.com/lz4/lz4-java)
      (Apache 2) Objenesis (org.objenesis:objenesis:2.1 - http://objenesis.org)
@@ -301,12 +304,13 @@ The text of each license is the standard Apache 2.0 
license.
      (Apache-2.0) snappy-java (org.xerial.snappy:snappy-java:1.1.8.3 - 
https://github.com/xerial/snappy-java)
      (Apache-2.0) snappy-java (org.xerial.snappy:snappy-java:1.1.1.3 - 
https://github.com/xerial/snappy-java)
      (Apache-2.0) maven-wrapper (org.apache.maven:maven-wrapper:3.8.4 
https://maven.apache.org/wrapper/)
-     (The Apache Software License, Version 2.0) protostuff 
(io.protostuff:protostuff-collectionschema:1.8.0 - 
https://github.com/protostuff/protostuff)     
+     (The Apache Software License, Version 2.0) protostuff 
(io.protostuff:protostuff-collectionschema:1.8.0 - 
https://github.com/protostuff/protostuff)
      (The Apache Software License, Version 2.0) protostuff 
(io.protostuff:protostuff-core:1.8.0 - https://github.com/protostuff/protostuff)
      (The Apache Software License, Version 2.0) protostuff 
(io.protostuff:protostuff-api:1.8.0 - https://github.com/protostuff/protostuff)
      (The Apache Software License, Version 2.0) protostuff 
(io.protostuff:protostuff-runtime:1.8.0 - 
https://github.com/protostuff/protostuff)     
      (The Apache Software License, Version 2.0) hazelcast 
(com.hazelcast:hazelcast:5.1 - https://github.com/hazelcast/hazelcast)
-     
+     (Apache-2.0) disruptor (com.lmax:disruptor:3.4.4 
https://lmax-exchange.github.io/disruptor/)
+
 ========================================================================
 MOZILLA PUBLIC LICENSE License
 ========================================================================
@@ -359,8 +363,8 @@ The following components are provided under the MIT 
License. See project link fo
 The text of each license is also included at licenses/LICENSE-[project].txt. 
 
      (MIT License) scopt (com.github.scopt:scopt_2.11:3.5.0 - 
https://github.com/scopt/scopt)
-     (MIT License) SLF4J API Module (org.slf4j:slf4j-api:1.7.25 - 
http://www.slf4j.org)
-     (MIT License) SLF4J LOG4J-12 Binding (org.slf4j:slf4j-log4j12:1.7.25 - 
http://www.slf4j.org)       
+     (MIT License) slf4j-api (org.slf4j:slf4j-api:1.7.25 - 
http://www.slf4j.org)
+     (MIT License) jcl-over-slf4j (org.slf4j:jcl-over-slf4j:1.7.25 - 
http://www.slf4j.org)
 ========================================================================
 Public Domain License
 ========================================================================
diff --git a/seatunnel-dist/release-docs/NOTICE 
b/seatunnel-dist/release-docs/NOTICE
index 19c7f5a64..b004e9281 100644
--- a/seatunnel-dist/release-docs/NOTICE
+++ b/seatunnel-dist/release-docs/NOTICE
@@ -464,11 +464,26 @@ from the source code management (SCM) system project uses.
 Apache log4j NOTICE
 
 ========================================================================
-Apache log4j
-Copyright 2010 The Apache Software Foundation
+Apache Log4j
+Copyright 1999-2021 Apache Software Foundation
 
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
+
+ResolverUtil.java
+Copyright 2005-2006 Tim Fennell
+
+Dumbster SMTP test server
+Copyright 2004 Jason Paul Kitchen
+
+TypeUtil.java
+Copyright 2002-2012 Ramnivas Laddad, Juergen Hoeller, Chris Beams
+
+picocli (http://picocli.info)
+Copyright 2017 Remko Popma
+
+TimeoutBlockingWaitStrategy.java and parts of Util.java
+Copyright 2011 LMAX Ltd.
 ========================================================================
 
 Apache ORC NOTICE
diff --git a/seatunnel-dist/src/main/assembly/assembly-bin-ci.xml 
b/seatunnel-dist/src/main/assembly/assembly-bin-ci.xml
index b197b51a2..ccedb58ee 100644
--- a/seatunnel-dist/src/main/assembly/assembly-bin-ci.xml
+++ b/seatunnel-dist/src/main/assembly/assembly-bin-ci.xml
@@ -115,6 +115,21 @@
         </file>
     </files>
     <dependencySets>
+        <!-- ============ Logging Jars ============  -->
+        <dependencySet>
+            <useProjectArtifact>false</useProjectArtifact>
+            <useTransitiveDependencies>true</useTransitiveDependencies>
+            <unpack>false</unpack>
+            <outputDirectory>/starter/logging</outputDirectory>
+            <includes>
+                <include>org.slf4j:slf4j-api:jar</include>
+                <include>org.slf4j:jcl-over-slf4j:jar</include>
+                <include>org.apache.logging.log4j:log4j-api:jar</include>
+                <include>org.apache.logging.log4j:log4j-core:jar</include>
+                
<include>org.apache.logging.log4j:log4j-slf4j-impl:jar</include>
+            </includes>
+        </dependencySet>
+
         <!-- ============ Starter Jars ============  -->
         <dependencySet>
             <useProjectArtifact>false</useProjectArtifact>
diff --git a/seatunnel-dist/src/main/assembly/assembly-bin.xml 
b/seatunnel-dist/src/main/assembly/assembly-bin.xml
index a535d48c2..747b28b8e 100644
--- a/seatunnel-dist/src/main/assembly/assembly-bin.xml
+++ b/seatunnel-dist/src/main/assembly/assembly-bin.xml
@@ -135,6 +135,21 @@
     </files>
 
     <dependencySets>
+        <!-- ============ Logging Jars ============  -->
+        <dependencySet>
+            <useProjectArtifact>false</useProjectArtifact>
+            <useTransitiveDependencies>true</useTransitiveDependencies>
+            <unpack>false</unpack>
+            <outputDirectory>/starter/logging</outputDirectory>
+            <includes>
+                <include>org.slf4j:slf4j-api:jar</include>
+                <include>org.slf4j:jcl-over-slf4j:jar</include>
+                <include>org.apache.logging.log4j:log4j-api:jar</include>
+                <include>org.apache.logging.log4j:log4j-core:jar</include>
+                
<include>org.apache.logging.log4j:log4j-slf4j-impl:jar</include>
+            </includes>
+        </dependencySet>
+
         <!-- ============ Starter Jars ============  -->
         <dependencySet>
             <useProjectArtifact>false</useProjectArtifact>
diff --git a/seatunnel-e2e/pom.xml b/seatunnel-e2e/pom.xml
index 4a5c70ed5..7ff89647c 100644
--- a/seatunnel-e2e/pom.xml
+++ b/seatunnel-e2e/pom.xml
@@ -47,11 +47,6 @@
             <groupId>org.testcontainers</groupId>
             <artifactId>testcontainers</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
-            <scope>test</scope>
-        </dependency>
         <!-- Testcontainers 1.x is tightly coupled with the JUnit 4.x rule 
API-->
         <dependency>
             <groupId>junit</groupId>
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-assert-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-assert-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-assert-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-file-local-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-file-local-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-file-local-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-jdbc-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-redis-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-redis-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-connector-v2-e2e/connector-redis-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/AbstractTestContainer.java
 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/AbstractTestContainer.java
index 2efeeb058..d7271dd80 100644
--- 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/AbstractTestContainer.java
+++ 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/AbstractTestContainer.java
@@ -79,6 +79,12 @@ public abstract class AbstractTestContainer implements 
TestContainer {
             SEATUNNEL_HOME);
     }
 
+    protected void copySeaTunnelStarterLoggingToContainer(GenericContainer<?> 
container) {
+        ContainerUtil.copySeaTunnelStarterLoggingToContainer(container,
+            this.startModuleFullPath,
+            SEATUNNEL_HOME);
+    }
+
     protected Container.ExecResult executeJob(GenericContainer<?> container, 
String confFile) throws IOException, InterruptedException {
         final String confInContainerPath = 
copyConfigFileToContainer(container, confFile);
         // copy connectors
@@ -100,18 +106,26 @@ public abstract class AbstractTestContainer implements 
TestContainer {
         command.add(adaptPathForWin(configPath));
         command.addAll(getExtraStartShellCommands());
 
+        LOG.info("Execute config file: {} to Container[{}] "
+                + "\n==================== Shell Command start 
====================\n"
+                + "{}"
+                + "\n==================== Shell Command end   
====================",
+                configPath, container.getDockerImageName(), String.join(" ", 
command));
         Container.ExecResult execResult = container.execInContainer("bash", 
"-c", String.join(" ", command));
+
         if (execResult.getStdout() != null && execResult.getStdout().length() 
> 0) {
-            LOG.info("\n==================== ExecuteConfigFile: {} STDOUT 
start ====================\n"
+            LOG.info("Execute config file: {} to Container[{}] STDOUT:"
+                    + "\n==================== STDOUT start 
====================\n"
                     + "{}"
-                    + "\n==================== ExecuteConfigFile: {} STDOUT end 
  ====================",
-                configPath, execResult.getStdout(), configPath);
+                    + "\n==================== STDOUT end   
====================",
+                    configPath, container.getDockerImageName(), 
execResult.getStdout());
         }
         if (execResult.getStderr() != null && execResult.getStderr().length() 
> 0) {
-            LOG.error("\n==================== ExecuteConfigFile: {} STDERR 
start ====================\n"
+            LOG.error("Execute config file: {} to Container[{}] STDERR:"
+                    + "\n==================== STDERR start 
====================\n"
                     + "{}"
-                    + "\n==================== ExecuteConfigFile: {} STDERR end 
  ====================",
-                configPath, execResult.getStderr(), configPath);
+                    + "\n==================== STDERR end   
====================",
+                    configPath, container.getDockerImageName(), 
execResult.getStderr());
         }
         return execResult;
     }
diff --git 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/flink/AbstractTestFlinkContainer.java
 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/flink/AbstractTestFlinkContainer.java
index 4a4dbfa9e..089f77bc2 100644
--- 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/flink/AbstractTestFlinkContainer.java
+++ 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/flink/AbstractTestFlinkContainer.java
@@ -75,6 +75,7 @@ public abstract class AbstractTestFlinkContainer extends 
AbstractTestContainer {
                 .withRegEx(".*Starting the resource manager.*")
                 .withStartupTimeout(Duration.ofMinutes(2)));
         copySeaTunnelStarterToContainer(jobManager);
+        copySeaTunnelStarterLoggingToContainer(jobManager);
 
         taskManager = new GenericContainer<>(dockerImage)
             .withCommand("taskmanager")
diff --git 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/spark/AbstractTestSparkContainer.java
 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/spark/AbstractTestSparkContainer.java
index ee0fa9cf1..2489ef2c6 100644
--- 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/spark/AbstractTestSparkContainer.java
+++ 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/container/spark/AbstractTestSparkContainer.java
@@ -57,6 +57,7 @@ public abstract class AbstractTestSparkContainer extends 
AbstractTestContainer {
                 .withRegEx(".*Master: Starting Spark master at.*")
                 .withStartupTimeout(Duration.ofMinutes(2)));
         copySeaTunnelStarterToContainer(master);
+        copySeaTunnelStarterLoggingToContainer(master);
 
         // In most case we can just use standalone mode to execute a spark 
job, if we want to use cluster mode, we need to
         // start a worker.
diff --git 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/util/ContainerUtil.java
 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/util/ContainerUtil.java
index 2ff6518b5..6c762844c 100644
--- 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/util/ContainerUtil.java
+++ 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/java/org/apache/seatunnel/e2e/common/util/ContainerUtil.java
@@ -92,6 +92,16 @@ public final class ContainerUtil {
         return targetConfInContainer;
     }
 
+    public static void 
copySeaTunnelStarterLoggingToContainer(GenericContainer<?> container,
+                                                              String 
startModulePath,
+                                                              String 
seatunnelHomeInContainer) {
+        // copy logging lib
+        final String loggingLibPath = startModulePath + File.separator + 
"target" + File.separator + "logging-e2e" + File.separator;
+        checkPathExist(loggingLibPath);
+        
container.withCopyFileToContainer(MountableFile.forHostPath(loggingLibPath),
+            Paths.get(seatunnelHomeInContainer, "starter", 
"logging").toString());
+    }
+
     public static void copySeaTunnelStarterToContainer(GenericContainer<?> 
container,
                                                        String startModuleName,
                                                        String startModulePath,
diff --git 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/resources/log4j.properties 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- a/seatunnel-e2e/seatunnel-e2e-common/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-e2e-common/src/test/resources/log4j2.properties 
b/seatunnel-e2e/seatunnel-e2e-common/src/test/resources/log4j2.properties
new file mode 100644
index 000000000..2dc1b8ca5
--- /dev/null
+++ b/seatunnel-e2e/seatunnel-e2e-common/src/test/resources/log4j2.properties
@@ -0,0 +1,42 @@
+################################################################################
+#  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.
+################################################################################
+
+rootLogger.level = INFO
+
+rootLogger.appenderRef.consoleStdout.ref = consoleStdoutAppender
+rootLogger.appenderRef.consoleStderr.ref = consoleStderrAppender
+
+appender.consoleStdout.name = consoleStdoutAppender
+appender.consoleStdout.type = CONSOLE
+appender.consoleStdout.target = SYSTEM_OUT
+appender.consoleStdout.layout.type = PatternLayout
+appender.consoleStdout.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStdout.filter.acceptLtWarn.type = ThresholdFilter
+appender.consoleStdout.filter.acceptLtWarn.level = WARN
+appender.consoleStdout.filter.acceptLtWarn.onMatch = DENY
+appender.consoleStdout.filter.acceptLtWarn.onMismatch = ACCEPT
+
+appender.consoleStderr.name = consoleStderrAppender
+appender.consoleStderr.type = CONSOLE
+appender.consoleStderr.target = SYSTEM_ERR
+appender.consoleStderr.layout.type = PatternLayout
+appender.consoleStderr.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStderr.filter.acceptGteWarn.type = ThresholdFilter
+appender.consoleStderr.filter.acceptGteWarn.level = WARN
+appender.consoleStderr.filter.acceptGteWarn.onMatch = ACCEPT
+appender.consoleStderr.filter.acceptGteWarn.onMismatch = DENY
diff --git 
a/seatunnel-e2e/seatunnel-engine-e2e/connector-seatunnel-e2e-base/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-engine-e2e/connector-seatunnel-e2e-base/src/test/resources/log4j.properties
deleted file mode 100644
index 8757e3b86..000000000
--- 
a/seatunnel-e2e/seatunnel-engine-e2e/connector-seatunnel-e2e-base/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
-
-log4j.logger.org.apache.seatunnel.engine.server.checkpoint.CheckpointCoordinator=DEBUG
-log4j.logger.org.apache.seatunnel.engine.server.scheduler.PipelineBaseScheduler=DEBUG
diff --git 
a/seatunnel-e2e/seatunnel-engine-e2e/connector-seatunnel-e2e-base/src/test/resources/log4j2-test.properties
 
b/seatunnel-e2e/seatunnel-engine-e2e/connector-seatunnel-e2e-base/src/test/resources/log4j2-test.properties
new file mode 100644
index 000000000..eab88a7c7
--- /dev/null
+++ 
b/seatunnel-e2e/seatunnel-engine-e2e/connector-seatunnel-e2e-base/src/test/resources/log4j2-test.properties
@@ -0,0 +1,47 @@
+################################################################################
+#  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.
+################################################################################
+
+rootLogger.level = INFO
+
+rootLogger.appenderRef.consoleStdout.ref = consoleStdoutAppender
+rootLogger.appenderRef.consoleStderr.ref = consoleStderrAppender
+
+logger.checkpoint.name=org.apache.seatunnel.engine.server.checkpoint.CheckpointCoordinator
+logger.checkpoint.level=DEBUG
+logger.pipeline.name=org.apache.seatunnel.engine.server.scheduler.PipelineBaseScheduler
+logger.pipeline.level=DEBUG
+
+appender.consoleStdout.name = consoleStdoutAppender
+appender.consoleStdout.type = CONSOLE
+appender.consoleStdout.target = SYSTEM_OUT
+appender.consoleStdout.layout.type = PatternLayout
+appender.consoleStdout.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStdout.filter.acceptLtWarn.type = ThresholdFilter
+appender.consoleStdout.filter.acceptLtWarn.level = WARN
+appender.consoleStdout.filter.acceptLtWarn.onMatch = DENY
+appender.consoleStdout.filter.acceptLtWarn.onMismatch = ACCEPT
+
+appender.consoleStderr.name = consoleStderrAppender
+appender.consoleStderr.type = CONSOLE
+appender.consoleStderr.target = SYSTEM_ERR
+appender.consoleStderr.layout.type = PatternLayout
+appender.consoleStderr.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStderr.filter.acceptGteWarn.type = ThresholdFilter
+appender.consoleStderr.filter.acceptGteWarn.level = WARN
+appender.consoleStderr.filter.acceptGteWarn.onMatch = ACCEPT
+appender.consoleStderr.filter.acceptGteWarn.onMismatch = DENY
diff --git 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-assert-flink-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-assert-flink-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-assert-flink-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-datahub-flink-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-datahub-flink-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-datahub-flink-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-fake-flink-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-fake-flink-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-fake-flink-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-iceberg-flink-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-iceberg-flink-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-iceberg-flink-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-iotdb-flink-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-iotdb-flink-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-iotdb-flink-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-jdbc-flink-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-jdbc-flink-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-jdbc-flink-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-kafka-flink-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-kafka-flink-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-kafka-flink-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-mongodb-flink-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-mongodb-flink-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-mongodb-flink-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-neo4j-flink-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-neo4j-flink-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-connector-v2-e2e/connector-neo4j-flink-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-assert-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-assert-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index 57b61a3c1..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-assert-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-# Set everything to be logged to the console
-log4j.rootCategory=ERROR, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-clickhouse-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-clickhouse-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index 57b61a3c1..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-clickhouse-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-# Set everything to be logged to the console
-log4j.rootCategory=ERROR, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-fake-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-fake-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index 57b61a3c1..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-fake-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-# Set everything to be logged to the console
-log4j.rootCategory=ERROR, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-file-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-file-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index 57b61a3c1..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-file-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-# Set everything to be logged to the console
-log4j.rootCategory=ERROR, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-http-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-http-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index 57b61a3c1..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-e2e/seatunnel-connector-flink-http-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-# Set everything to be logged to the console
-log4j.rootCategory=ERROR, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-flink-sql-e2e/setunnel-connector-flink-sql-fake-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-flink-sql-e2e/setunnel-connector-flink-sql-fake-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index 57b61a3c1..000000000
--- 
a/seatunnel-e2e/seatunnel-flink-sql-e2e/setunnel-connector-flink-sql-fake-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-# Set everything to be logged to the console
-log4j.rootCategory=ERROR, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-datahub-spark-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-datahub-spark-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-datahub-spark-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-fake-spark-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-fake-spark-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-fake-spark-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-iceberg-spark-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-iceberg-spark-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-iceberg-spark-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-iotdb-spark-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-iotdb-spark-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-iotdb-spark-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-jdbc-spark-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-jdbc-spark-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-jdbc-spark-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-kafka-spark-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-kafka-spark-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index db5d9e512..000000000
--- 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-kafka-spark-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-mongodb-spark-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-mongodb-spark-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index 89ed3ad31..000000000
--- 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-mongodb-spark-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-neo4j-spark-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-neo4j-spark-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index 89ed3ad31..000000000
--- 
a/seatunnel-e2e/seatunnel-spark-connector-v2-e2e/connector-neo4j-spark-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-#
-# 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.
-#
-
-# Set everything to be logged to the console
-log4j.rootCategory=INFO, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-fake-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-fake-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index 89547981c..000000000
--- 
a/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-fake-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=ERROR, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-http-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-http-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index 89547981c..000000000
--- 
a/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-http-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=ERROR, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-jdbc-e2e/src/test/resources/log4j.properties
 
b/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-jdbc-e2e/src/test/resources/log4j.properties
deleted file mode 100644
index 89547981c..000000000
--- 
a/seatunnel-e2e/seatunnel-spark-e2e/seatunnel-connector-spark-jdbc-e2e/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# 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.
-#
-# Set everything to be logged to the console
-log4j.rootCategory=ERROR, console
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.target=System.err
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p 
%c{1}: %m%n
diff --git 
a/seatunnel-engine/seatunnel-engine-client/src/test/resources/log4j2-test.properties
 
b/seatunnel-engine/seatunnel-engine-client/src/test/resources/log4j2-test.properties
new file mode 100644
index 000000000..2dc1b8ca5
--- /dev/null
+++ 
b/seatunnel-engine/seatunnel-engine-client/src/test/resources/log4j2-test.properties
@@ -0,0 +1,42 @@
+################################################################################
+#  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.
+################################################################################
+
+rootLogger.level = INFO
+
+rootLogger.appenderRef.consoleStdout.ref = consoleStdoutAppender
+rootLogger.appenderRef.consoleStderr.ref = consoleStderrAppender
+
+appender.consoleStdout.name = consoleStdoutAppender
+appender.consoleStdout.type = CONSOLE
+appender.consoleStdout.target = SYSTEM_OUT
+appender.consoleStdout.layout.type = PatternLayout
+appender.consoleStdout.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStdout.filter.acceptLtWarn.type = ThresholdFilter
+appender.consoleStdout.filter.acceptLtWarn.level = WARN
+appender.consoleStdout.filter.acceptLtWarn.onMatch = DENY
+appender.consoleStdout.filter.acceptLtWarn.onMismatch = ACCEPT
+
+appender.consoleStderr.name = consoleStderrAppender
+appender.consoleStderr.type = CONSOLE
+appender.consoleStderr.target = SYSTEM_ERR
+appender.consoleStderr.layout.type = PatternLayout
+appender.consoleStderr.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStderr.filter.acceptGteWarn.type = ThresholdFilter
+appender.consoleStderr.filter.acceptGteWarn.level = WARN
+appender.consoleStderr.filter.acceptGteWarn.onMatch = ACCEPT
+appender.consoleStderr.filter.acceptGteWarn.onMismatch = DENY
diff --git 
a/seatunnel-engine/seatunnel-engine-common/src/main/resources/hazelcast-client.yaml
 
b/seatunnel-engine/seatunnel-engine-common/src/main/resources/hazelcast-client.yaml
index 9552c382e..1a31be9f6 100644
--- 
a/seatunnel-engine/seatunnel-engine-common/src/main/resources/hazelcast-client.yaml
+++ 
b/seatunnel-engine/seatunnel-engine-common/src/main/resources/hazelcast-client.yaml
@@ -17,7 +17,8 @@
 
 hazelcast-client:
   cluster-name: seatunnel
-
+  properties:
+      hazelcast.logging.type: log4j2
   network:
     cluster-members:
       - localhost:5801
diff --git 
a/seatunnel-engine/seatunnel-engine-common/src/main/resources/hazelcast.yaml 
b/seatunnel-engine/seatunnel-engine-common/src/main/resources/hazelcast.yaml
index 5ad9e5bc5..49c9bc20c 100644
--- a/seatunnel-engine/seatunnel-engine-common/src/main/resources/hazelcast.yaml
+++ b/seatunnel-engine/seatunnel-engine-common/src/main/resources/hazelcast.yaml
@@ -18,6 +18,11 @@
 hazelcast:
   cluster-name: seatunnel
   network:
+    rest-api:
+      enabled: true
+      endpoint-groups:
+        CLUSTER_WRITE:
+          enabled: true
     join:
       tcp-ip:
         enabled: true
@@ -30,3 +35,4 @@ hazelcast:
   properties:
     hazelcast.invocation.max.retry.count: 20
     hazelcast.tcp.join.port.try.count: 30
+    hazelcast.logging.type: log4j2
diff --git 
a/seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/NodeExtension.java
 
b/seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/NodeExtension.java
index e857d9bd8..f132a26c8 100644
--- 
a/seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/NodeExtension.java
+++ 
b/seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/NodeExtension.java
@@ -17,11 +17,18 @@
 
 package org.apache.seatunnel.engine.server;
 
+import static 
com.hazelcast.internal.ascii.TextCommandConstants.TextCommandType.HTTP_GET;
+import static 
com.hazelcast.internal.ascii.TextCommandConstants.TextCommandType.HTTP_POST;
+
 import org.apache.seatunnel.engine.common.config.SeaTunnelConfig;
+import org.apache.seatunnel.engine.server.log.Log4j2HttpGetCommandProcessor;
+import org.apache.seatunnel.engine.server.log.Log4j2HttpPostCommandProcessor;
 
 import com.hazelcast.cluster.ClusterState;
 import com.hazelcast.instance.impl.DefaultNodeExtension;
 import com.hazelcast.instance.impl.Node;
+import com.hazelcast.internal.ascii.TextCommandService;
+import com.hazelcast.internal.ascii.TextCommandServiceImpl;
 import lombok.NonNull;
 
 import java.util.Map;
@@ -63,6 +70,16 @@ public class NodeExtension extends DefaultNodeExtension {
         return extCommon.createExtensionServices();
     }
 
+    @Override
+    public TextCommandService createTextCommandService() {
+        return new TextCommandServiceImpl(node) {
+            {
+                register(HTTP_GET, new Log4j2HttpGetCommandProcessor(this));
+                register(HTTP_POST, new Log4j2HttpPostCommandProcessor(this));
+            }
+        };
+    }
+
     @Override
     public void printNodeInfo() {
         extCommon.printNodeInfo(systemLogger, "");
diff --git 
a/seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/log/Log4j2HttpGetCommandProcessor.java
 
b/seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/log/Log4j2HttpGetCommandProcessor.java
new file mode 100644
index 000000000..604cc8570
--- /dev/null
+++ 
b/seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/log/Log4j2HttpGetCommandProcessor.java
@@ -0,0 +1,89 @@
+/*
+ * 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.
+ */
+
+package org.apache.seatunnel.engine.server.log;
+
+import com.hazelcast.internal.ascii.TextCommandService;
+import com.hazelcast.internal.ascii.rest.HttpCommandProcessor;
+import com.hazelcast.internal.ascii.rest.HttpGetCommand;
+import com.hazelcast.internal.ascii.rest.HttpGetCommandProcessor;
+import com.hazelcast.internal.json.JsonObject;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.LoggerConfig;
+
+import java.util.Map;
+
+public class Log4j2HttpGetCommandProcessor extends 
HttpCommandProcessor<HttpGetCommand> {
+
+    private final HttpGetCommandProcessor original;
+
+    public Log4j2HttpGetCommandProcessor(TextCommandService 
textCommandService) {
+        this(textCommandService, new 
HttpGetCommandProcessor(textCommandService));
+    }
+
+    public Log4j2HttpGetCommandProcessor(TextCommandService textCommandService,
+                                         HttpGetCommandProcessor 
httpGetCommandProcessor) {
+        super(textCommandService, 
textCommandService.getNode().getLogger(Log4j2HttpGetCommandProcessor.class));
+        this.original = httpGetCommandProcessor;
+    }
+
+    @Override
+    public void handleRejection(HttpGetCommand request) {
+        handle(request);
+    }
+
+    @Override
+    public void handle(HttpGetCommand request) {
+        String uri = request.getURI();
+        if (uri.startsWith(HttpCommandProcessor.URI_LOG_LEVEL)) {
+            outputAllLoggerLevel(request);
+        } else {
+            original.handle(request);
+        }
+    }
+
+    /**
+     * Request example:
+     *
+     * GET {@link HttpCommandProcessor#URI_LOG_LEVEL}
+     *
+     * Response Body(application/json):
+     *
+     * {
+     *     "root": "INFO"
+     *     "com.example.logger1": "ERROR"
+     * }
+     *
+     */
+    private void outputAllLoggerLevel(HttpGetCommand request) {
+        JsonObject jsonObject = new JsonObject();
+
+        LoggerContext loggerContext = LoggerContext.getContext(false);
+        Map<String, LoggerConfig> loggers = 
loggerContext.getConfiguration().getLoggers();
+        for (String logger : loggers.keySet()) {
+            LoggerConfig config = loggers.get(logger);
+            if (LogManager.ROOT_LOGGER_NAME.equals(logger)) {
+                logger = LoggerConfig.ROOT;
+            }
+            jsonObject.set(logger, config.getLevel().name());
+        }
+
+        prepareResponse(request, jsonObject);
+        textCommandService.sendResponse(request);
+    }
+}
diff --git 
a/seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/log/Log4j2HttpPostCommandProcessor.java
 
b/seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/log/Log4j2HttpPostCommandProcessor.java
new file mode 100644
index 000000000..306d310ad
--- /dev/null
+++ 
b/seatunnel-engine/seatunnel-engine-server/src/main/java/org/apache/seatunnel/engine/server/log/Log4j2HttpPostCommandProcessor.java
@@ -0,0 +1,90 @@
+/*
+ * 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.
+ */
+
+package org.apache.seatunnel.engine.server.log;
+
+import static com.hazelcast.internal.ascii.rest.HttpStatusCode.SC_500;
+
+import com.hazelcast.internal.ascii.TextCommandService;
+import com.hazelcast.internal.ascii.rest.HttpCommandProcessor;
+import com.hazelcast.internal.ascii.rest.HttpPostCommand;
+import com.hazelcast.internal.ascii.rest.HttpPostCommandProcessor;
+import com.hazelcast.internal.json.JsonObject;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.core.config.Configurator;
+import org.apache.logging.log4j.core.config.LoggerConfig;
+
+public class Log4j2HttpPostCommandProcessor extends 
HttpCommandProcessor<HttpPostCommand> {
+
+    private final HttpPostCommandProcessor original;
+
+    public Log4j2HttpPostCommandProcessor(TextCommandService 
textCommandService) {
+        this(textCommandService, new 
HttpPostCommandProcessor(textCommandService));
+    }
+
+    public Log4j2HttpPostCommandProcessor(TextCommandService 
textCommandService,
+                                          HttpPostCommandProcessor 
httpPostCommandProcessor) {
+        super(textCommandService, 
textCommandService.getNode().getLogger(Log4j2HttpPostCommandProcessor.class));
+        this.original = httpPostCommandProcessor;
+    }
+
+    @Override
+    public void handleRejection(HttpPostCommand request) {
+        handle(request);
+    }
+
+    @Override
+    public void handle(HttpPostCommand request) {
+        String uri = request.getURI();
+        if (uri.startsWith(HttpCommandProcessor.URI_LOG_LEVEL)) {
+            setLoggerLevel(request);
+        } else if (uri.startsWith(HttpCommandProcessor.URI_LOG_LEVEL_RESET)) {
+            prepareResponse(SC_500, request, "Reset logger level endpoint 
disabled!");
+            textCommandService.sendResponse(request);
+        } else {
+            original.handle(request);
+        }
+    }
+
+    /**
+     * Request example:
+     *
+     * POST {@link HttpCommandProcessor#URI_LOG_LEVEL}
+     *
+     * Request Body(application/text):
+     *
+     * your_username&your_password&com.example.logger1&ERROR
+     *
+     */
+    @SuppressWarnings("MagicNumber")
+    private void setLoggerLevel(HttpPostCommand request) {
+        try {
+            String[] params = decodeParamsAndAuthenticate(request, 4);
+            String logger = params[2];
+            String level = params[3];
+            if (LoggerConfig.ROOT.equals(logger)) {
+                Configurator.setRootLevel(Level.getLevel(level));
+            } else {
+                Configurator.setLevel(logger, Level.getLevel(level));
+            }
+            prepareResponse(request, new JsonObject().add("status", 
"SUCCESS"));
+        } catch (Throwable e) {
+            prepareResponse(SC_500, request, exceptionResponse(e));
+        }
+        textCommandService.sendResponse(request);
+    }
+}
diff --git 
a/seatunnel-engine/seatunnel-engine-server/src/test/resources/log4j2-test.properties
 
b/seatunnel-engine/seatunnel-engine-server/src/test/resources/log4j2-test.properties
new file mode 100644
index 000000000..2dc1b8ca5
--- /dev/null
+++ 
b/seatunnel-engine/seatunnel-engine-server/src/test/resources/log4j2-test.properties
@@ -0,0 +1,42 @@
+################################################################################
+#  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.
+################################################################################
+
+rootLogger.level = INFO
+
+rootLogger.appenderRef.consoleStdout.ref = consoleStdoutAppender
+rootLogger.appenderRef.consoleStderr.ref = consoleStderrAppender
+
+appender.consoleStdout.name = consoleStdoutAppender
+appender.consoleStdout.type = CONSOLE
+appender.consoleStdout.target = SYSTEM_OUT
+appender.consoleStdout.layout.type = PatternLayout
+appender.consoleStdout.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStdout.filter.acceptLtWarn.type = ThresholdFilter
+appender.consoleStdout.filter.acceptLtWarn.level = WARN
+appender.consoleStdout.filter.acceptLtWarn.onMatch = DENY
+appender.consoleStdout.filter.acceptLtWarn.onMismatch = ACCEPT
+
+appender.consoleStderr.name = consoleStderrAppender
+appender.consoleStderr.type = CONSOLE
+appender.consoleStderr.target = SYSTEM_ERR
+appender.consoleStderr.layout.type = PatternLayout
+appender.consoleStderr.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStderr.filter.acceptGteWarn.type = ThresholdFilter
+appender.consoleStderr.filter.acceptGteWarn.level = WARN
+appender.consoleStderr.filter.acceptGteWarn.onMatch = ACCEPT
+appender.consoleStderr.filter.acceptGteWarn.onMismatch = DENY
diff --git 
a/seatunnel-engine/seatunnel-engine-storage/checkpoint-storage-plugins/checkpoint-storage-local-file/src/test/resources/log4j2-test.properties
 
b/seatunnel-engine/seatunnel-engine-storage/checkpoint-storage-plugins/checkpoint-storage-local-file/src/test/resources/log4j2-test.properties
new file mode 100644
index 000000000..2dc1b8ca5
--- /dev/null
+++ 
b/seatunnel-engine/seatunnel-engine-storage/checkpoint-storage-plugins/checkpoint-storage-local-file/src/test/resources/log4j2-test.properties
@@ -0,0 +1,42 @@
+################################################################################
+#  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.
+################################################################################
+
+rootLogger.level = INFO
+
+rootLogger.appenderRef.consoleStdout.ref = consoleStdoutAppender
+rootLogger.appenderRef.consoleStderr.ref = consoleStderrAppender
+
+appender.consoleStdout.name = consoleStdoutAppender
+appender.consoleStdout.type = CONSOLE
+appender.consoleStdout.target = SYSTEM_OUT
+appender.consoleStdout.layout.type = PatternLayout
+appender.consoleStdout.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStdout.filter.acceptLtWarn.type = ThresholdFilter
+appender.consoleStdout.filter.acceptLtWarn.level = WARN
+appender.consoleStdout.filter.acceptLtWarn.onMatch = DENY
+appender.consoleStdout.filter.acceptLtWarn.onMismatch = ACCEPT
+
+appender.consoleStderr.name = consoleStderrAppender
+appender.consoleStderr.type = CONSOLE
+appender.consoleStderr.target = SYSTEM_ERR
+appender.consoleStderr.layout.type = PatternLayout
+appender.consoleStderr.layout.pattern = %d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c - 
%m%n
+appender.consoleStderr.filter.acceptGteWarn.type = ThresholdFilter
+appender.consoleStderr.filter.acceptGteWarn.level = WARN
+appender.consoleStderr.filter.acceptGteWarn.onMatch = ACCEPT
+appender.consoleStderr.filter.acceptGteWarn.onMismatch = DENY
diff --git a/tools/dependencies/known-dependencies.txt 
b/tools/dependencies/known-dependencies.txt
index db0b6fbaa..a4b2de5ec 100755
--- a/tools/dependencies/known-dependencies.txt
+++ b/tools/dependencies/known-dependencies.txt
@@ -18,6 +18,7 @@ commons-lang3-3.4.jar
 commons-math3-3.5.jar
 commons-pool-1.6.jar
 config-1.3.3.jar
+disruptor-3.4.4.jar
 flink-annotations-1.13.6.jar
 flink-avro-1.13.6.jar
 flink-connector-base-1.13.6.jar
@@ -60,10 +61,14 @@ jackson-dataformat-properties-2.12.6.jar
 jackson-mapper-asl-1.9.13.jar
 javassist-3.24.0-GA.jar
 javax.annotation-api-1.3.2.jar
+jcl-over-slf4j-1.7.25.jar
 jcommander-1.81.jar
 jsr305-1.3.9.jar
 kryo-2.24.0.jar
-log4j-1.2.17.jar
+log4j-api-2.17.1.jar
+log4j-core-2.17.1.jar
+log4j-slf4j-impl-2.17.1.jar
+log4j-1.2-api-2.17.1.jar
 lz4-1.3.0.jar
 lz4-java-1.6.0.jar
 minlog-1.2.jar
@@ -100,7 +105,6 @@ scopt_2.11-3.5.0.jar
 seatunnel-config-base-2.1.1.jar
 seatunnel-config-shade-2.1.1.jar
 slf4j-api-1.7.25.jar
-slf4j-log4j12-1.7.25.jar
 snappy-java-1.1.1.3.jar
 snappy-java-1.1.7.1.jar
 snappy-java-1.1.8.3.jar

Reply via email to