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

diqiu50 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 52b8f53412 [#12634] improvement(trino-connector): Log via 
io.airlift.log.Logger (#12635)
52b8f53412 is described below

commit 52b8f53412a315c4c44fee03769269cd3b0fc054
Author: Yuhui <[email protected]>
AuthorDate: Thu Aug 27 14:12:17 2026 +0800

    [#12634] improvement(trino-connector): Log via io.airlift.log.Logger 
(#12635)
    
    ### What changes were proposed in this pull request?
    
    Switch trino-connector's logging from SLF4J/Log4j2 to
    `io.airlift.log.Logger`, matching Trino's
    own connectors.
    
    ### Why are the changes needed?
    
    Trino loads the connector plugin in an isolated classloader. Log4j2 is
    classloader-scoped and the
    plugin jar ships no config, so it falls back to Log4j2's default (root
    ERROR, console) — most log
    output is silently dropped instead of reaching `var/log/server.log`.
    `io.airlift.log.Logger` wraps
    `java.util.logging`, a JVM-wide singleton unaffected by classloader
    isolation.
    
    Fix: #12634
    
    ### Does this PR introduce any user-facing change?
    
    No. Trino admins will now see Gravitino connector logs in
    `var/log/server.log`.
    
    ### How was this patch tested?
    
    - Compiled all trino-connector modules (base + 5 version-range variants)
    - `./gradlew :trino-connector:trino-connector:test`
    - `./build.sh sp`
---
 build.gradle.kts                                   | 16 +++++---
 docs/trino-connector/development.md                | 23 +++--------
 docs/trino-connector/installation.md               |  3 +-
 gradle/libs.versions.toml                          |  4 +-
 .../trino-connector-435-439/build.gradle.kts       |  3 +-
 .../trino-connector-440-445/build.gradle.kts       |  3 +-
 .../trino-connector-446-451/build.gradle.kts       |  3 +-
 .../trino-connector-452-468/build.gradle.kts       |  3 +-
 .../trino-connector-469-472/build.gradle.kts       |  3 +-
 .../trino-connector-473-478/build.gradle.kts       |  3 +-
 trino-connector/trino-connector/build.gradle.kts   |  3 +-
 .../trino/connector/GravitinoConnector.java        |  9 ++---
 .../trino/connector/GravitinoConnectorFactory.java | 14 +++----
 .../connector/GravitinoConnectorPluginManager.java | 18 ++++-----
 .../trino/connector/GravitinoMetadata.java         | 13 +++---
 .../connector/catalog/CatalogConnectorManager.java | 46 ++++++++++------------
 .../catalog/CatalogConnectorMetadata.java          |  7 ++--
 .../catalog/CatalogConnectorMetadataAdapter.java   |  7 ++--
 .../catalog/CatalogPropertyConverter.java          |  9 ++---
 .../trino/connector/catalog/CatalogRegister.java   | 27 ++++++-------
 .../catalog/DefaultCatalogConnectorFactory.java    |  5 +--
 .../catalog/jdbc/mysql/MySQLMetadataAdapter.java   |  3 +-
 .../connector/security/GravitinoAuthProvider.java  |  9 ++---
 .../AlterCatalogStoredProcedure.java               |  7 ++--
 .../CreateCatalogStoredProcedure.java              |  7 ++--
 .../DropCatalogStoredProcedure.java                | 12 +++---
 .../trino/connector/util/json/JsonCodec.java       |  7 ++--
 27 files changed, 124 insertions(+), 143 deletions(-)

diff --git a/build.gradle.kts b/build.gradle.kts
index 2b6027ef42..94ca8ac447 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -157,11 +157,17 @@ allprojects {
           "import\\s+.*\\.org\\.apache\\.commons\\.io\\.([A-Z][a-zA-Z0-9_]*);",
           "import org.apache.commons.io.${'$'}1;"
         )
-        replaceRegex(
-          "Use SLF4J Logger instead of other logging frameworks",
-          "import\\s+.*\\.(Logger|LoggerFactory);",
-          "import org.slf4j.${'$'}1;"
-        )
+        // The trino-connector module logs via io.airlift.log.Logger to match 
Trino's own
+        // logging so plugin log output routes into Trino's unified log, 
instead of SLF4J.
+        // integration-test is intentionally excluded from this carve-out: it 
runs outside
+        // Trino's isolated plugin classloader, so it should keep using SLF4J 
as normal.
+        if (!project.path.startsWith(":trino-connector:trino-connector")) {
+          replaceRegex(
+            "Use SLF4J Logger instead of other logging frameworks",
+            "import\\s+.*\\.(Logger|LoggerFactory);",
+            "import org.slf4j.${'$'}1;"
+          )
+        }
         replaceRegex(
           "Remove Testcontainers shading",
           "import\\s+org\\.testcontainers\\.shaded\\.([^;]+);",
diff --git a/docs/trino-connector/development.md 
b/docs/trino-connector/development.md
index 5120955a77..cd2b54aa47 100644
--- a/docs/trino-connector/development.md
+++ b/docs/trino-connector/development.md
@@ -178,27 +178,14 @@ Change `localhost`, `port`, and the names of metalake and 
catalogs to match your
         </dependency>
 
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>2.0.9</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-slf4j2-impl</artifactId>
-            <version>2.22.0</version>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-api</artifactId>
-            <version>2.22.0</version>
+            <groupId>io.airlift</groupId>
+            <artifactId>log</artifactId>
         </dependency>
 
         <dependency>
-            <groupId>org.apache.logging.log4j</groupId>
-            <artifactId>log4j-core</artifactId>
-            <version>2.22.0</version>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-jdk14</artifactId>
+            <version>2.0.17</version>
         </dependency>
 
         <dependency>
diff --git a/docs/trino-connector/installation.md 
b/docs/trino-connector/installation.md
index d39b200ee3..9543261510 100644
--- a/docs/trino-connector/installation.md
+++ b/docs/trino-connector/installation.md
@@ -64,8 +64,7 @@ After unpacking, you can see the connector directory:
 1. Download and unpack the correct Gravitino Trino connector tarball for your 
Trino version.
 2. Rename the unpacked connector directory to `gravitino`, and then copy it to 
the Trino plugin directory.
    Normally, the directory location is `Trino-server-<version>/plugin`, and 
the directory contains other catalogs used by Trino.
-3. Add Trino JVM arguments 
`-Dlog4j.configurationFile=file:////etc/trino/log4j2.properties` to enable 
logging for the Gravitino Trino connector.
-4. Update Trino coordinator configuration. 
+3. Update Trino coordinator configuration.
    You need to set `catalog.management=dynamic`, The config location is 
`Trino-server-<version>/etc/config.properties`,  and the contents like:
 
 ```text
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 9222b53ab3..cb83b3b861 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -38,6 +38,7 @@ jetty = "9.4.58.v20250814"
 jersey = "2.41"
 mockito = "4.11.0"
 airlift-json = "237"
+airlift-log = "237"
 airlift-resolver = "1.6"
 hive2 = "2.3.9"
 hive3 = "3.1.3"
@@ -196,7 +197,7 @@ junit-jupiter-params = { group = "org.junit.jupiter", name 
= "junit-jupiter-para
 junit-jupiter-engine = { group = "org.junit.jupiter", name = 
"junit-jupiter-engine", version.ref = "junit" }
 slf4j-api = { group = "org.slf4j", name = "slf4j-api", version.ref = "slf4j" }
 slf4j-simple = { group = "org.slf4j", name = "slf4j-simple", version.ref = 
"slf4j" }
-slf4j-jdk14 = { group = "org.slf4j", name = "slf4j-jdk14", version = "1.7.30" }
+slf4j-jdk14 = { group = "org.slf4j", name = "slf4j-jdk14", version.ref = 
"slf4j" }
 log4j-slf4j2-impl = { group = "org.apache.logging.log4j", name = 
"log4j-slf4j2-impl", version.ref = "log4j" }
 log4j-api = { group = "org.apache.logging.log4j", name = "log4j-api", 
version.ref = "log4j" }
 log4j-core = { group = "org.apache.logging.log4j", name = "log4j-core", 
version.ref = "log4j" }
@@ -246,6 +247,7 @@ hadoop3-shaded-guava = { group = 
"org.apache.hadoop.thirdparty", name = "hadoop-
 hadoop3-shaded-protobuf = { group = "org.apache.hadoop.thirdparty", name = 
"hadoop-shaded-protobuf_3_7", version.ref = "hadoop3-thirdparty" }
 re2j = { group = "com.google.re2j", name = "re2j", version.ref = "re2j" }
 airlift-json = { group = "io.airlift", name = "json", version.ref = 
"airlift-json"}
+airlift-log = { group = "io.airlift", name = "log", version.ref = 
"airlift-log" }
 airlift-resolver = { group = "io.airlift.resolver", name = "resolver", 
version.ref = "airlift-resolver"}
 httpclient = { group = "org.apache.httpcomponents", name = "httpclient", 
version.ref = "httpclient" }
 httpclient5 = { group = "org.apache.httpcomponents.client5", name = 
"httpclient5", version.ref = "httpclient5" }
diff --git a/trino-connector/trino-connector-435-439/build.gradle.kts 
b/trino-connector/trino-connector-435-439/build.gradle.kts
index befe0343a7..a3864ffec9 100644
--- a/trino-connector/trino-connector-435-439/build.gradle.kts
+++ b/trino-connector/trino-connector-435-439/build.gradle.kts
@@ -51,7 +51,8 @@ dependencies {
   implementation(project(":catalogs:catalog-common"))
   implementation(project(":clients:client-java-runtime", configuration = 
"shadow"))
   implementation(libs.airlift.json)
-  implementation(libs.bundles.log4j)
+  implementation(libs.airlift.log)
+  implementation(libs.slf4j.jdk14)
   implementation(libs.commons.collections4)
   implementation(libs.commons.lang3)
   implementation("io.trino:trino-jdbc:$trinoVersion")
diff --git a/trino-connector/trino-connector-440-445/build.gradle.kts 
b/trino-connector/trino-connector-440-445/build.gradle.kts
index d7bddb39e7..af4f5158ea 100644
--- a/trino-connector/trino-connector-440-445/build.gradle.kts
+++ b/trino-connector/trino-connector-440-445/build.gradle.kts
@@ -52,11 +52,12 @@ dependencies {
   implementation(project(":catalogs:catalog-common"))
   implementation(project(":clients:client-java-runtime", configuration = 
"shadow"))
   implementation(libs.airlift.json)
-  implementation(libs.bundles.log4j)
   implementation(libs.commons.collections4)
   implementation(libs.commons.lang3)
   implementation("io.trino:trino-jdbc:$trinoVersion")
   
runtimeOnly("io.opentelemetry.semconv:opentelemetry-semconv:$otelSemconvVersion")
+  implementation(libs.airlift.log)
+  implementation(libs.slf4j.jdk14)
   compileOnly(libs.airlift.resolver)
   compileOnly("io.trino:trino-spi:$trinoVersion") {
     exclude("org.apache.logging.log4j")
diff --git a/trino-connector/trino-connector-446-451/build.gradle.kts 
b/trino-connector/trino-connector-446-451/build.gradle.kts
index 6ae0102706..e4e75eda71 100644
--- a/trino-connector/trino-connector-446-451/build.gradle.kts
+++ b/trino-connector/trino-connector-446-451/build.gradle.kts
@@ -52,11 +52,12 @@ dependencies {
   implementation(project(":catalogs:catalog-common"))
   implementation(project(":clients:client-java-runtime", configuration = 
"shadow"))
   implementation(libs.airlift.json)
-  implementation(libs.bundles.log4j)
   implementation(libs.commons.collections4)
   implementation(libs.commons.lang3)
   implementation("io.trino:trino-jdbc:$trinoVersion")
   
runtimeOnly("io.opentelemetry.semconv:opentelemetry-semconv-incubating:$otelSemconvVersion")
+  implementation(libs.airlift.log)
+  implementation(libs.slf4j.jdk14)
   compileOnly(libs.airlift.resolver)
   compileOnly("io.trino:trino-spi:$trinoVersion") {
     exclude("org.apache.logging.log4j")
diff --git a/trino-connector/trino-connector-452-468/build.gradle.kts 
b/trino-connector/trino-connector-452-468/build.gradle.kts
index 6bcdff5e41..767903355f 100644
--- a/trino-connector/trino-connector-452-468/build.gradle.kts
+++ b/trino-connector/trino-connector-452-468/build.gradle.kts
@@ -52,11 +52,12 @@ dependencies {
   implementation(project(":catalogs:catalog-common"))
   implementation(project(":clients:client-java-runtime", configuration = 
"shadow"))
   implementation(libs.airlift.json)
-  implementation(libs.bundles.log4j)
   implementation(libs.commons.collections4)
   implementation(libs.commons.lang3)
   implementation("io.trino:trino-jdbc:$trinoVersion")
   
runtimeOnly("io.opentelemetry.semconv:opentelemetry-semconv:$otelSemconvVersion")
+  implementation(libs.airlift.log)
+  implementation(libs.slf4j.jdk14)
   compileOnly(libs.airlift.resolver)
   compileOnly("io.trino:trino-spi:$trinoVersion") {
     exclude("org.apache.logging.log4j")
diff --git a/trino-connector/trino-connector-469-472/build.gradle.kts 
b/trino-connector/trino-connector-469-472/build.gradle.kts
index ef3857a23c..e8ca4e2994 100644
--- a/trino-connector/trino-connector-469-472/build.gradle.kts
+++ b/trino-connector/trino-connector-469-472/build.gradle.kts
@@ -57,11 +57,12 @@ dependencies {
   compileOnly(project(":common"))
 
   implementation(libs.airlift.json)
-  implementation(libs.bundles.log4j)
   implementation(libs.commons.collections4)
   implementation(libs.commons.lang3)
   implementation("io.trino:trino-jdbc:$trinoVersion")
   
runtimeOnly("io.opentelemetry.semconv:opentelemetry-semconv:$otelSemconvVersion")
+  implementation(libs.airlift.log)
+  implementation(libs.slf4j.jdk14)
   compileOnly(libs.airlift.resolver)
   compileOnly("io.trino:trino-spi:$trinoVersion") {
     exclude("org.apache.logging.log4j")
diff --git a/trino-connector/trino-connector-473-478/build.gradle.kts 
b/trino-connector/trino-connector-473-478/build.gradle.kts
index d74624bb6d..f41b2aba87 100644
--- a/trino-connector/trino-connector-473-478/build.gradle.kts
+++ b/trino-connector/trino-connector-473-478/build.gradle.kts
@@ -52,11 +52,12 @@ dependencies {
   implementation(project(":catalogs:catalog-common"))
   implementation(project(":clients:client-java-runtime", configuration = 
"shadow"))
   implementation(libs.airlift.json)
-  implementation(libs.bundles.log4j)
   implementation(libs.commons.collections4)
   implementation(libs.commons.lang3)
   implementation("io.trino:trino-jdbc:$trinoVersion")
   
runtimeOnly("io.opentelemetry.semconv:opentelemetry-semconv:$otelSemconvVersion")
+  implementation(libs.airlift.log)
+  implementation(libs.slf4j.jdk14)
   compileOnly(libs.airlift.resolver)
   compileOnly("io.trino:trino-spi:$trinoVersion") {
     exclude("org.apache.logging.log4j")
diff --git a/trino-connector/trino-connector/build.gradle.kts 
b/trino-connector/trino-connector/build.gradle.kts
index 69ed4e7593..17b87d889c 100644
--- a/trino-connector/trino-connector/build.gradle.kts
+++ b/trino-connector/trino-connector/build.gradle.kts
@@ -35,10 +35,11 @@ dependencies {
   implementation(project(":clients:client-java-runtime", configuration = 
"shadow"))
 
   implementation(libs.airlift.json)
-  implementation(libs.bundles.log4j)
   implementation(libs.commons.collections4)
   implementation(libs.commons.lang3)
   implementation("io.trino:trino-jdbc:$trinoVersion")
+  implementation(libs.airlift.log)
+  implementation(libs.slf4j.jdk14)
   compileOnly(libs.airlift.resolver)
   compileOnly("io.trino:trino-spi:$trinoVersion") {
     exclude("org.apache.logging.log4j")
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector.java
index e038f9671e..66f7b78036 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnector.java
@@ -28,6 +28,7 @@ import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
 import com.google.common.cache.RemovalNotification;
 import com.google.common.util.concurrent.UncheckedExecutionException;
+import io.airlift.log.Logger;
 import io.trino.spi.TrinoException;
 import io.trino.spi.connector.Connector;
 import io.trino.spi.connector.ConnectorAccessControl;
@@ -57,8 +58,6 @@ import 
org.apache.gravitino.trino.connector.catalog.CatalogConnectorContext;
 import org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadata;
 import 
org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadataAdapter;
 import org.apache.gravitino.trino.connector.security.GravitinoAuthProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * GravitinoConnector serves as the entry point for operations on the 
connector managed by Trino and
@@ -67,7 +66,7 @@ import org.slf4j.LoggerFactory;
  */
 public class GravitinoConnector implements Connector {
 
-  private static final Logger LOG = 
LoggerFactory.getLogger(GravitinoConnector.class);
+  private static final Logger LOG = Logger.get(GravitinoConnector.class);
 
   private final NameIdentifier catalogIdentifier;
   protected final CatalogConnectorContext catalogConnectorContext;
@@ -258,7 +257,7 @@ public class GravitinoConnector implements Connector {
     } catch (ExecutionException | UncheckedExecutionException e) {
       Throwable cause = e.getCause() == null ? e : e.getCause();
       LOG.warn(
-          "Failed to create per-user Gravitino client for user '{}'", 
session.getUser(), cause);
+          cause, "Failed to create per-user Gravitino client for user '%s'", 
session.getUser());
       if (cause instanceof TrinoException) {
         // Already carries a specific Trino error code (e.g. from 
buildForSession); re-wrapping
         // would swallow it.
@@ -353,7 +352,7 @@ public class GravitinoConnector implements Connector {
       try {
         client.close();
       } catch (Exception e) {
-        LOG.warn("Failed to close GravitinoAdminClient", e);
+        LOG.warn(e, "Failed to close GravitinoAdminClient");
       }
     }
   }
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory.java
index 6308b7d1bc..722a75e7ea 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorFactory.java
@@ -25,6 +25,7 @@ import static 
org.apache.gravitino.trino.connector.GravitinoErrorCode.GRAVITINO_
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
+import io.airlift.log.Logger;
 import io.trino.spi.TrinoException;
 import io.trino.spi.connector.Connector;
 import io.trino.spi.connector.ConnectorContext;
@@ -45,13 +46,11 @@ import 
org.apache.gravitino.trino.connector.catalog.DefaultCatalogConnectorFacto
 import org.apache.gravitino.trino.connector.system.GravitinoSystemConnector;
 import 
org.apache.gravitino.trino.connector.system.storedprocedure.GravitinoStoredProcedureFactory;
 import 
org.apache.gravitino.trino.connector.system.table.GravitinoSystemTableFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /** Gravitino connector factory. */
 public class GravitinoConnectorFactory implements ConnectorFactory {
 
-  private static final Logger LOG = 
LoggerFactory.getLogger(GravitinoConnectorFactory.class);
+  private static final Logger LOG = 
Logger.get(GravitinoConnectorFactory.class);
   private static final int MIN_SUPPORT_TRINO_SPI_VERSION = 435;
   private static final int MAX_SUPPORT_TRINO_SPI_VERSION = Integer.MAX_VALUE;
   private static final Pattern TRINO_SPI_VERSION_PATTERN = 
Pattern.compile("^(\\d+)");
@@ -154,7 +153,7 @@ public class GravitinoConnectorFactory implements 
ConnectorFactory {
         }
       } catch (Exception e) {
         String message = "Initialization of the GravitinoConnector failed " + 
e.getMessage();
-        LOG.error(message);
+        LOG.error(e, message);
         throw new TrinoException(GRAVITINO_RUNTIME_ERROR, message, e);
       }
     }
@@ -213,10 +212,9 @@ public class GravitinoConnectorFactory implements 
ConnectorFactory {
     // check catalog name with metalake are supported in this trino version
     if (!config.singleMetalakeMode() && !supportCatalogNameWithMetalake()) {
       LOG.warn(
-          "The trino-connector-{}-{} does not fully support catalog name with 
metalake. "
+          "The trino-connector-%s-%s does not fully support catalog name with 
metalake. "
               + "The DROP CATALOG operation may not work correctly in 
multi-metalake mode.",
-          getMinSupportTrinoSpiVersion(),
-          getMaxSupportTrinoSpiVersion());
+          getMinSupportTrinoSpiVersion(), getMaxSupportTrinoSpiVersion());
     }
 
     // skip version validation
@@ -225,7 +223,7 @@ public class GravitinoConnectorFactory implements 
ConnectorFactory {
       if (trinoVersion < getMinSupportTrinoSpiVersion()
           || trinoVersion > getMaxSupportTrinoSpiVersion()) {
         LOG.warn(
-            "Trino version {} has not been tested with Gravitino and may have 
compatibility issues",
+            "Trino version %s has not been tested with Gravitino and may have 
compatibility issues",
             trinoVersion);
       }
       return;
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorPluginManager.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorPluginManager.java
index ccf59b8e59..192f272d55 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorPluginManager.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoConnectorPluginManager.java
@@ -22,6 +22,7 @@ import static 
org.apache.gravitino.trino.connector.GravitinoConfig.TRINO_PLUGIN_
 
 import com.google.common.base.Splitter;
 import com.google.common.collect.ImmutableList;
+import io.airlift.log.Logger;
 import io.airlift.resolver.ArtifactResolver;
 import io.trino.spi.Plugin;
 import io.trino.spi.TrinoException;
@@ -39,14 +40,12 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.ServiceLoader;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.sonatype.aether.artifact.Artifact;
 
 /** This class is mange the internal connector plugin and help to create the 
connector. */
 public class GravitinoConnectorPluginManager {
 
-  private static final Logger LOG = 
LoggerFactory.getLogger(GravitinoConnectorPluginManager.class);
+  private static final Logger LOG = 
Logger.get(GravitinoConnectorPluginManager.class);
 
   /** The app class loader name. */
   public static final String APP_CLASS_LOADER_NAME = "app";
@@ -136,7 +135,7 @@ public class GravitinoConnectorPluginManager {
           .forEach(
               file -> {
                 loadPlugin(pluginDir, file.getName());
-                LOG.info("Load plugin {}/{} successful", pluginDir, 
file.getName());
+                LOG.info("Load plugin %s/%s successful", pluginDir, 
file.getName());
               });
     } catch (Exception e) {
       throw new TrinoException(
@@ -149,7 +148,7 @@ public class GravitinoConnectorPluginManager {
     File directory = new File(dirName);
     File[] pluginFiles = directory.listFiles();
     if (pluginFiles == null || pluginFiles.length == 0) {
-      LOG.warn("Cannot load plugin {} from empty directory {}", pluginName, 
dirName);
+      LOG.warn("Cannot load plugin %s from empty directory %s", pluginName, 
dirName);
       return;
     }
     List<URL> files =
@@ -183,6 +182,7 @@ public class GravitinoConnectorPluginManager {
                   "io.trino.spi.",
                   "com.fasterxml.jackson.annotation.",
                   "io.airlift.slice.",
+                  "io.airlift.log.",
                   "org.openjdk.jol.",
                   "io.opentelemetry.api.",
                   "io.opentelemetry.context."));
@@ -191,13 +191,13 @@ public class GravitinoConnectorPluginManager {
           ServiceLoader.load(Plugin.class, (ClassLoader) pluginClassLoader);
       List<Plugin> pluginList = ImmutableList.copyOf(serviceLoader);
       if (pluginList.isEmpty()) {
-        LOG.warn("The {} plugin directory does not contain a connector SPI 
interface", pluginName);
+        LOG.warn("The %s plugin directory does not contain a connector SPI 
interface", pluginName);
         return;
       }
       Plugin plugin = pluginList.get(0);
       if (plugin.getConnectorFactories() == null
           || !plugin.getConnectorFactories().iterator().hasNext()) {
-        LOG.warn("The {} plugin does not contain any ConnectorFactories", 
pluginName);
+        LOG.warn("The %s plugin does not contain any ConnectorFactories", 
pluginName);
         return;
       }
       connectorPlugins.put(pluginName, pluginList.get(0));
@@ -235,7 +235,7 @@ public class GravitinoConnectorPluginManager {
               try {
                 loadPluginByPom(artifactResolver.resolvePom(new File(v)), key);
               } catch (Exception e) {
-                LOG.error("Fatal error in load plugin by {}", v, e);
+                LOG.error(e, "Fatal error in load plugin by %s", v);
               }
             });
   }
@@ -292,7 +292,7 @@ public class GravitinoConnectorPluginManager {
           new ThreadContextClassLoader(plugin.getClass().getClassLoader())) {
         ConnectorFactory connectorFactory = 
plugin.getConnectorFactories().iterator().next();
         Connector connector = connectorFactory.create(connectorName, config, 
context);
-        LOG.info("create connector {} with config {} successful", 
connectorName, config);
+        LOG.info("create connector %s with config %s successful", 
connectorName, config);
         return connector;
       }
     } catch (Exception e) {
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata.java
index 04a264e077..f05b557233 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/GravitinoMetadata.java
@@ -24,6 +24,7 @@ import static 
org.apache.gravitino.trino.connector.GravitinoErrorCode.GRAVITINO_
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
+import io.airlift.log.Logger;
 import io.airlift.slice.Slice;
 import io.trino.spi.TrinoException;
 import io.trino.spi.connector.AggregateFunction;
@@ -85,8 +86,6 @@ import 
org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadata;
 import 
org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadataAdapter;
 import org.apache.gravitino.trino.connector.metadata.GravitinoSchema;
 import org.apache.gravitino.trino.connector.metadata.GravitinoTable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * The GravitinoMetadata class provides operations for Apache Gravitino 
metadata on the Gravitino
@@ -95,7 +94,7 @@ import org.slf4j.LoggerFactory;
  */
 public abstract class GravitinoMetadata implements ConnectorMetadata {
 
-  private static final Logger LOG = 
LoggerFactory.getLogger(GravitinoMetadata.class);
+  private static final Logger LOG = Logger.get(GravitinoMetadata.class);
 
   // The column handle name that will generate row IDs for the merge operation.
   public static final String MERGE_ROW_ID = "$row_id";
@@ -285,7 +284,7 @@ public abstract class GravitinoMetadata implements 
ConnectorMetadata {
       try {
         catalogConnectorMetadata.dropTable(tableName);
       } catch (Exception dropException) {
-        LOG.warn("Failed to drop table {} during CTAS cleanup", tableName, 
dropException);
+        LOG.warn(dropException, "Failed to drop table %s during CTAS cleanup", 
tableName);
       }
       throw e;
     }
@@ -310,7 +309,7 @@ public abstract class GravitinoMetadata implements 
ConnectorMetadata {
       // (e.g., Hive 'format' is a String in Gravitino but HiveStorageFormat 
enum internally).
       // Returning empty is correct for non-bucketed CTAS.
       LOG.debug(
-          "Skipping internal getNewTableLayout due to property type mismatch: 
{}", e.getMessage());
+          "Skipping internal getNewTableLayout due to property type mismatch: 
%s", e.getMessage());
       return Optional.empty();
     }
   }
@@ -858,7 +857,7 @@ public abstract class GravitinoMetadata implements 
ConnectorMetadata {
       }
       return toLanguageFunctions(function);
     } catch (NoSuchFunctionException e) {
-      LOG.debug("Function {} not found in schema {}", name.getFunctionName(), 
name.getSchemaName());
+      LOG.debug("Function %s not found in schema %s", name.getFunctionName(), 
name.getSchemaName());
       return List.of();
     }
   }
@@ -881,7 +880,7 @@ public abstract class GravitinoMetadata implements 
ConnectorMetadata {
           String signatureToken = buildSignatureToken(function.name(), 
definition.parameters());
           result.add(new LanguageFunction(signatureToken, sql, List.of(), 
Optional.empty()));
         } catch (TrinoException e) {
-          LOG.warn("Failed to build signature token for function {}", 
function.name(), e);
+          LOG.warn(e, "Failed to build signature token for function %s", 
function.name());
         }
       }
     }
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogConnectorManager.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogConnectorManager.java
index 9d477676af..045c5d80fb 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogConnectorManager.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogConnectorManager.java
@@ -20,6 +20,7 @@ package org.apache.gravitino.trino.connector.catalog;
 
 import com.google.common.base.Preconditions;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import io.airlift.log.Logger;
 import io.trino.spi.TrinoException;
 import io.trino.spi.connector.ConnectorContext;
 import java.util.Arrays;
@@ -44,8 +45,6 @@ import org.apache.gravitino.trino.connector.GravitinoConfig;
 import org.apache.gravitino.trino.connector.GravitinoErrorCode;
 import org.apache.gravitino.trino.connector.metadata.GravitinoCatalog;
 import org.apache.gravitino.trino.connector.security.GravitinoAuthProvider;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * This class has the following main functions:
@@ -58,7 +57,7 @@ import org.slf4j.LoggerFactory;
  * </pre>
  */
 public class CatalogConnectorManager {
-  private static final Logger LOG = 
LoggerFactory.getLogger(CatalogConnectorManager.class);
+  private static final Logger LOG = Logger.get(CatalogConnectorManager.class);
 
   private static final int NUMBER_EXECUTOR_THREAD = 1;
   private static final int LOAD_METALAKE_TIMEOUT = 60;
@@ -104,7 +103,7 @@ public class CatalogConnectorManager {
             .setNameFormat("gravitino-connector-schedule-%d")
             .setUncaughtExceptionHandler(
                 (thread, throwable) ->
-                    LOG.warn("{} uncaught exception:", thread.getName(), 
throwable))
+                    LOG.warn(throwable, "%s uncaught exception:", 
thread.getName()))
             .build());
   }
 
@@ -119,7 +118,7 @@ public class CatalogConnectorManager {
     if (client == null) {
       String authType =
           
config.getClientConfig().getOrDefault(GravitinoAuthProvider.AUTH_TYPE_KEY, 
"none");
-      LOG.info("Building Gravitino client with authType: {}", authType);
+      LOG.info("Building Gravitino client with authType: %s", authType);
       try {
         this.gravitinoClient = GravitinoAuthProvider.build(config);
       } catch (IllegalArgumentException e) {
@@ -197,14 +196,14 @@ public class CatalogConnectorManager {
       for (String usedMetalake : usedMetalakes) {
         try {
           GravitinoMetalake metalake = metalakes.get(usedMetalake);
-          LOG.debug("Load metalake: {}", usedMetalake);
+          LOG.debug("Load metalake: %s", usedMetalake);
           loadCatalogs(metalake);
         } catch (Exception e) {
-          LOG.error("Load Metalake {} failed.", usedMetalake, e);
+          LOG.error(e, "Load Metalake %s failed.", usedMetalake);
         }
       }
     } catch (Exception e) {
-      LOG.error("Error when loading metalake", e);
+      LOG.error(e, "Error when loading metalake");
     }
   }
 
@@ -233,11 +232,11 @@ public class CatalogConnectorManager {
               .filter(id -> !skipCatalog(getTrinoCatalogName(metalake.name(), 
id)))
               .collect(Collectors.toList());
     } catch (Exception e) {
-      LOG.error("Failed to list catalogs in metalake {}.", metalake.name(), e);
+      LOG.error(e, "Failed to list catalogs in metalake %s.", metalake.name());
       return;
     }
 
-    LOG.debug("Load metalake {}'s catalogs. catalogs: {}.", metalake.name(), 
catalogNames);
+    LOG.debug("Load metalake %s's catalogs. catalogs: %s.", metalake.name(), 
catalogNames);
 
     // Delete those catalogs that have been deleted in Gravitino server
     Set<String> catalogNameStrings =
@@ -253,7 +252,7 @@ public class CatalogConnectorManager {
         try {
           unloadCatalog(entry.getValue().getCatalog());
         } catch (Exception e) {
-          LOG.error("Failed to remove catalog {}.", entry.getKey(), e);
+          LOG.error(e, "Failed to remove catalog %s.", entry.getKey());
         }
       }
     }
@@ -280,13 +279,11 @@ public class CatalogConnectorManager {
                 }
               } catch (UnsupportedOperationException e) {
                 LOG.warn(
-                    "Unsupported catalog type for catalog {} in metalake {}: 
{}",
-                    catalogName,
-                    metalake.name(),
-                    e.getMessage());
+                    "Unsupported catalog type for catalog %s in metalake %s: 
%s",
+                    catalogName, metalake.name(), e.getMessage());
               } catch (Exception e) {
                 LOG.error(
-                    "Failed to load metalake {}'s catalog {}.", 
metalake.name(), catalogName, e);
+                    e, "Failed to load metalake %s's catalog %s.", 
metalake.name(), catalogName);
               }
             });
   }
@@ -302,12 +299,12 @@ public class CatalogConnectorManager {
     catalogConnectors.remove(catalogFullName);
 
     loadCatalogImpl(catalog);
-    LOG.info("Update catalog '{}' in metalake {} successfully.", catalog, 
catalog.getMetalake());
+    LOG.info("Update catalog '%s' in metalake %s successfully.", catalog, 
catalog.getMetalake());
   }
 
   private void loadCatalog(GravitinoCatalog catalog) {
     loadCatalogImpl(catalog);
-    LOG.info("Load catalog {} in metalake {} successfully.", catalog, 
catalog.getMetalake());
+    LOG.info("Load catalog %s in metalake %s successfully.", catalog, 
catalog.getMetalake());
   }
 
   private void loadCatalogImpl(GravitinoCatalog catalog) {
@@ -316,7 +313,7 @@ public class CatalogConnectorManager {
     } catch (Exception e) {
       String message =
           String.format("Failed to create internal catalog connector. The 
catalog is: %s", catalog);
-      LOG.error(message, e);
+      LOG.error(e, message);
       throw new TrinoException(
           GravitinoErrorCode.GRAVITINO_CREATE_INTERNAL_CONNECTOR_ERROR, 
message, e);
     }
@@ -327,9 +324,8 @@ public class CatalogConnectorManager {
     catalogRegister.unregisterCatalog(catalogFullName);
     catalogConnectors.remove(catalogFullName);
     LOG.info(
-        "Remove catalog '{}' in metalake {} successfully.",
-        catalog.getName(),
-        catalog.getMetalake());
+        "Remove catalog '%s' in metalake %s successfully.",
+        catalog.getName(), catalog.getMetalake());
   }
 
   /**
@@ -438,10 +434,10 @@ public class CatalogConnectorManager {
       CatalogConnectorContext connectorContext = builder.build();
       String fullCatalogName = getTrinoCatalogName(catalog);
       catalogConnectors.put(fullCatalogName, connectorContext);
-      LOG.info("Create connector {} successful", connectorName);
+      LOG.info("Create connector %s successful", connectorName);
       return connectorContext;
     } catch (Exception e) {
-      LOG.error("Failed to create connector: {}", connectorName, e);
+      LOG.error(e, "Failed to create connector: %s", connectorName);
       throw new TrinoException(
           GravitinoErrorCode.GRAVITINO_OPERATION_FAILED,
           "Failed to create connector: " + connectorName,
@@ -480,7 +476,7 @@ public class CatalogConnectorManager {
     for (Pattern pattern : config.getSkipCatalogPatterns()) {
       if (pattern.matcher(catalogName).matches()) {
         LOG.debug(
-            "Skip catalog {} with config 
`gravitino.trino.skip-catalog-patterns`.", catalogName);
+            "Skip catalog %s with config 
`gravitino.trino.skip-catalog-patterns`.", catalogName);
         return true;
       }
     }
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogConnectorMetadata.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogConnectorMetadata.java
index 7fd83e7575..4e71662872 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogConnectorMetadata.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogConnectorMetadata.java
@@ -19,6 +19,7 @@
 package org.apache.gravitino.trino.connector.catalog;
 
 import com.google.common.base.Strings;
+import io.airlift.log.Logger;
 import io.trino.spi.TrinoException;
 import io.trino.spi.connector.SchemaTableName;
 import java.util.Arrays;
@@ -47,13 +48,11 @@ import 
org.apache.gravitino.trino.connector.GravitinoErrorCode;
 import org.apache.gravitino.trino.connector.metadata.GravitinoColumn;
 import org.apache.gravitino.trino.connector.metadata.GravitinoSchema;
 import org.apache.gravitino.trino.connector.metadata.GravitinoTable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /** This class implements Apache Gravitino metadata operators. */
 public class CatalogConnectorMetadata {
 
-  private static final Logger LOG = 
LoggerFactory.getLogger(CatalogConnectorMetadata.class);
+  private static final Logger LOG = Logger.get(CatalogConnectorMetadata.class);
 
   private static final String CATALOG_DOES_NOT_EXIST_MSG = "Catalog does not 
exist";
   private static final String SCHEMA_DOES_NOT_EXIST_MSG = "Schema does not 
exist";
@@ -80,7 +79,7 @@ public class CatalogConnectorMetadata {
       try {
         fc = catalog.asFunctionCatalog();
       } catch (UnsupportedOperationException e) {
-        LOG.debug("Catalog {} does not support function operations", 
catalogName);
+        LOG.debug("Catalog %s does not support function operations", 
catalogName);
       }
       this.functionCatalog = fc;
     } catch (NoSuchCatalogException e) {
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogConnectorMetadataAdapter.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogConnectorMetadataAdapter.java
index cb6f54110b..d61f1d79e8 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogConnectorMetadataAdapter.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogConnectorMetadataAdapter.java
@@ -18,6 +18,7 @@
  */
 package org.apache.gravitino.trino.connector.catalog;
 
+import io.airlift.log.Logger;
 import io.trino.spi.connector.ColumnMetadata;
 import io.trino.spi.connector.ConnectorTableMetadata;
 import io.trino.spi.connector.ConnectorTableProperties;
@@ -35,8 +36,6 @@ import 
org.apache.gravitino.trino.connector.metadata.GravitinoColumn;
 import org.apache.gravitino.trino.connector.metadata.GravitinoSchema;
 import org.apache.gravitino.trino.connector.metadata.GravitinoTable;
 import org.apache.gravitino.trino.connector.util.GeneralDataTypeTransformer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * This interface is used to handle different parts of catalog metadata from 
different catalog
@@ -44,7 +43,7 @@ import org.slf4j.LoggerFactory;
  */
 public class CatalogConnectorMetadataAdapter {
 
-  private static final Logger LOG = 
LoggerFactory.getLogger(CatalogConnectorMetadataAdapter.class);
+  private static final Logger LOG = 
Logger.get(CatalogConnectorMetadataAdapter.class);
 
   /** The list of schema properties supported by this catalog connector. */
   protected final List<PropertyMetadata<?>> schemaProperties;
@@ -217,7 +216,7 @@ public class CatalogConnectorMetadataAdapter {
       if (properties.containsKey(name)) {
         validProperties.put(name, properties.get(name));
       } else {
-        LOG.warn("Property {} is not defined in Trino, we will ignore it", 
name);
+        LOG.warn("Property %s is not defined in Trino, we will ignore it", 
name);
       }
     }
     return validProperties;
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogPropertyConverter.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogPropertyConverter.java
index adb6d11d43..b42ce2a9c5 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogPropertyConverter.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogPropertyConverter.java
@@ -20,14 +20,13 @@
 package org.apache.gravitino.trino.connector.catalog;
 
 import com.google.common.collect.ImmutableMap;
+import io.airlift.log.Logger;
 import java.util.HashMap;
 import java.util.Map;
 import org.apache.gravitino.catalog.property.PropertyConverter;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 public class CatalogPropertyConverter extends PropertyConverter {
-  private static final Logger LOG = 
LoggerFactory.getLogger(PropertyConverter.class);
+  private static final Logger LOG = Logger.get(CatalogPropertyConverter.class);
 
   private static final String TRINO_PROPERTIES_PREFIX = "trino.bypass.";
 
@@ -59,7 +58,7 @@ public class CatalogPropertyConverter extends 
PropertyConverter {
       if (engineKey != null) {
         engineProperties.put(engineKey, entry.getValue());
       } else {
-        LOG.info("Property {} is not supported by engine", entry.getKey());
+        LOG.info("Property %s is not supported by engine", entry.getKey());
       }
     }
     // trino.bypass properties will be skipped when the catalog properties is 
defined by Gravitino
@@ -69,7 +68,7 @@ public class CatalogPropertyConverter extends 
PropertyConverter {
         if (!engineProperties.containsKey(key)) {
           engineProperties.put(key, entry.getValue());
         } else {
-          LOG.info("Property {} which with trino.bypass prefix is skipped", 
key);
+          LOG.info("Property %s which with trino.bypass prefix is skipped", 
key);
         }
       }
     }
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogRegister.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogRegister.java
index faca9c2499..fab43b70ed 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogRegister.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/CatalogRegister.java
@@ -23,6 +23,7 @@ import static 
org.apache.gravitino.trino.connector.GravitinoConfig.GRAVITINO_DYN
 
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.ImmutableSet;
+import io.airlift.log.Logger;
 import io.trino.jdbc.TrinoDriver;
 import io.trino.spi.TrinoException;
 import java.io.File;
@@ -39,8 +40,6 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.gravitino.trino.connector.GravitinoConfig;
 import org.apache.gravitino.trino.connector.GravitinoErrorCode;
 import org.apache.gravitino.trino.connector.metadata.GravitinoCatalog;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * This class dynamically register the Catalog managed by Apache Gravitino 
into Trino using Trino
@@ -48,7 +47,7 @@ import org.slf4j.LoggerFactory;
  */
 public class CatalogRegister {
 
-  private static final Logger LOG = 
LoggerFactory.getLogger(CatalogRegister.class);
+  private static final Logger LOG = Logger.get(CatalogRegister.class);
 
   private static final int EXECUTE_QUERY_MAX_RETRIES = 6;
   private static final int EXECUTE_QUERY_BACKOFF_TIME_SECOND = 5;
@@ -74,7 +73,7 @@ public class CatalogRegister {
       isStarted = statement.execute(command);
       return isStarted;
     } catch (Exception e) {
-      LOG.warn("Trino server is not started: {}", e.getMessage());
+      LOG.warn("Trino server is not started: %s", e.getMessage());
       return false;
     }
   }
@@ -182,13 +181,13 @@ public class CatalogRegister {
     Map<String, String> extraProperties = config.getTrinoJdbcExtraProperties();
     if (!extraProperties.isEmpty()) {
       // Log the names only, the values may contain credentials.
-      LOG.debug("Applying extra Trino JDBC properties: {}", 
extraProperties.keySet());
+      LOG.debug("Applying extra Trino JDBC properties: %s", 
extraProperties.keySet());
       extraProperties.keySet().stream()
           .filter(key -> key.startsWith("SSL") && properties.containsKey(key))
           .forEach(
               key ->
                   LOG.warn(
-                      "Extra Trino JDBC property '{}' overrides the TLS 
setting derived from the "
+                      "Extra Trino JDBC property '%s' overrides the TLS 
setting derived from the "
                           + "dedicated configuration and is applied without 
validation",
                       key));
       properties.putAll(extraProperties);
@@ -349,12 +348,12 @@ public class CatalogRegister {
       }
       String createCatalogCommand = generateCreateCatalogCommand(name, 
catalog);
       executeSql(createCatalogCommand);
-      LOG.info("Register catalog {} successfully: {}", name, 
createCatalogCommand);
+      LOG.info("Register catalog %s successfully: %s", name, 
createCatalogCommand);
     } catch (SQLException e) {
       throw new TrinoException(GravitinoErrorCode.GRAVITINO_RUNTIME_ERROR, 
e.getMessage(), e);
     } catch (Exception e) {
       String message = String.format("Failed to register catalog %s", name);
-      LOG.error(message);
+      LOG.error(e, message);
       throw new TrinoException(GravitinoErrorCode.GRAVITINO_RUNTIME_ERROR, 
message, e);
     }
   }
@@ -384,7 +383,7 @@ public class CatalogRegister {
           throw e;
         } catch (Exception e) {
           failedException = e;
-          LOG.warn("Failed to execute command: {}", showCatalogCommand, e);
+          LOG.warn(e, "Failed to execute command: %s", showCatalogCommand);
           Thread.sleep(EXECUTE_QUERY_BACKOFF_TIME_SECOND * 1000);
         }
       }
@@ -410,7 +409,7 @@ public class CatalogRegister {
           throw e;
         } catch (Exception e) {
           failedException = e;
-          LOG.warn("Failed to execute command: {}", sql, e);
+          LOG.warn(e, "Failed to execute command: %s", sql);
           Thread.sleep(EXECUTE_QUERY_BACKOFF_TIME_SECOND * 1000);
         }
       }
@@ -429,15 +428,15 @@ public class CatalogRegister {
   public void unregisterCatalog(String name) {
     try {
       if (!checkCatalogExist(name)) {
-        LOG.warn("Catalog {} does not exist", name);
+        LOG.warn("Catalog %s does not exist", name);
         return;
       }
       String dropCatalogCommand = generateDropCatalogCommand(name);
       executeSql(dropCatalogCommand);
-      LOG.info("Unregister catalog {} successfully: {}", name, 
dropCatalogCommand);
+      LOG.info("Unregister catalog %s successfully: %s", name, 
dropCatalogCommand);
     } catch (Exception e) {
       String message = String.format("Failed to unregister catalog %s", name);
-      LOG.error(message);
+      LOG.error(e, message);
       throw new TrinoException(GravitinoErrorCode.GRAVITINO_RUNTIME_ERROR, 
message, e);
     }
   }
@@ -449,7 +448,7 @@ public class CatalogRegister {
         connection.close();
       }
     } catch (SQLException e) {
-      LOG.error("Failed to close connection", e);
+      LOG.error(e, "Failed to close connection");
     }
   }
 }
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/DefaultCatalogConnectorFactory.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/DefaultCatalogConnectorFactory.java
index 29b2979da2..890293384a 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/DefaultCatalogConnectorFactory.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/DefaultCatalogConnectorFactory.java
@@ -18,6 +18,7 @@
  */
 package org.apache.gravitino.trino.connector.catalog;
 
+import io.airlift.log.Logger;
 import io.trino.spi.TrinoException;
 import java.util.HashMap;
 import java.util.Set;
@@ -31,12 +32,10 @@ import 
org.apache.gravitino.trino.connector.catalog.jdbc.postgresql.PostgreSQLCo
 import 
org.apache.gravitino.trino.connector.catalog.jdbc.trino.TrinoClusterConnectorAdapter;
 import 
org.apache.gravitino.trino.connector.catalog.memory.MemoryConnectorAdapter;
 import org.apache.gravitino.trino.connector.metadata.GravitinoCatalog;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /** This class use to create CatalogConnectorContext instance by given 
catalog. */
 public class DefaultCatalogConnectorFactory implements CatalogConnectorFactory 
{
-  private static final Logger LOG = 
LoggerFactory.getLogger(DefaultCatalogConnectorFactory.class);
+  private static final Logger LOG = 
Logger.get(DefaultCatalogConnectorFactory.class);
 
   private static final String GLUE_CONNECTOR_PROVIDER_NAME = "glue";
   private static final String HIVE_CONNECTOR_PROVIDER_NAME = "hive";
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLMetadataAdapter.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLMetadataAdapter.java
index 555170ef46..98f1606f65 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLMetadataAdapter.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/catalog/jdbc/mysql/MySQLMetadataAdapter.java
@@ -56,7 +56,6 @@ import 
org.apache.gravitino.trino.connector.catalog.CatalogConnectorMetadataAdap
 import 
org.apache.gravitino.trino.connector.catalog.jdbc.JdbcColumnDefaultValueConverter;
 import org.apache.gravitino.trino.connector.metadata.GravitinoColumn;
 import org.apache.gravitino.trino.connector.metadata.GravitinoTable;
-import org.apache.logging.log4j.util.Strings;
 
 /** Transforming Apache Gravitino MySQL metadata to Trino. */
 public class MySQLMetadataAdapter extends CatalogConnectorMetadataAdapter {
@@ -281,7 +280,7 @@ public class MySQLMetadataAdapter extends 
CatalogConnectorMetadataAdapter {
                 Arrays.stream(index.fieldNames())
                     .flatMap(Arrays::stream)
                     .collect(Collectors.toUnmodifiableList());
-            uniqueKeys.add(String.format("%s:%s", index.name(), 
Strings.join(columns, ',')));
+            uniqueKeys.add(String.format("%s:%s", index.name(), 
StringUtils.join(columns, ',')));
             break;
           default:
             throw new UnsupportedOperationException("Unsupported index type: " 
+ index.type());
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/security/GravitinoAuthProvider.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/security/GravitinoAuthProvider.java
index 2f68a9a7b4..a195ddef64 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/security/GravitinoAuthProvider.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/security/GravitinoAuthProvider.java
@@ -19,6 +19,7 @@
 package org.apache.gravitino.trino.connector.security;
 
 import com.google.common.base.Preconditions;
+import io.airlift.log.Logger;
 import io.trino.spi.TrinoException;
 import io.trino.spi.connector.ConnectorSession;
 import java.io.File;
@@ -31,8 +32,6 @@ import 
org.apache.gravitino.client.GravitinoClientConfiguration;
 import org.apache.gravitino.client.KerberosTokenProvider;
 import org.apache.gravitino.trino.connector.GravitinoConfig;
 import org.apache.gravitino.trino.connector.GravitinoErrorCode;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Builds a {@link GravitinoAdminClient} with the appropriate authentication 
provider based on the
@@ -41,7 +40,7 @@ import org.slf4j.LoggerFactory;
  */
 public class GravitinoAuthProvider {
 
-  private static final Logger LOG = 
LoggerFactory.getLogger(GravitinoAuthProvider.class);
+  private static final Logger LOG = Logger.get(GravitinoAuthProvider.class);
 
   /** Authentication type configuration key. */
   public static final String AUTH_TYPE_KEY =
@@ -329,7 +328,7 @@ public class GravitinoAuthProvider {
     // Remove leading slash from path if present
     String normalizedPath = path.startsWith("/") ? path.substring(1) : path;
 
-    LOG.info("Initializing OAuth2 token provider with server URI: {}", 
serverUri);
+    LOG.info("Initializing OAuth2 token provider with server URI: %s", 
serverUri);
     return DefaultOAuth2TokenProvider.builder()
         .withUri(serverUri)
         .withCredential(credential)
@@ -373,7 +372,7 @@ public class GravitinoAuthProvider {
       kerberosBuilder.withKeyTabFile(keytabFile);
     } else {
       LOG.warn(
-          "No keytab file configured for Kerberos authentication ({}). "
+          "No keytab file configured for Kerberos authentication (%s). "
               + "Authentication will fail at runtime unless Kerberos 
credentials are already "
               + "present in the current security context.",
           KERBEROS_KEYTAB_FILE_PATH_KEY);
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/system/storedprocedure/AlterCatalogStoredProcedure.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/system/storedprocedure/AlterCatalogStoredProcedure.java
index 7126568911..55f479ca56 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/system/storedprocedure/AlterCatalogStoredProcedure.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/system/storedprocedure/AlterCatalogStoredProcedure.java
@@ -20,6 +20,7 @@ package 
org.apache.gravitino.trino.connector.system.storedprocedure;
 
 import static io.trino.spi.type.VarcharType.VARCHAR;
 
+import io.airlift.log.Logger;
 import io.trino.spi.TrinoException;
 import io.trino.spi.block.ArrayBlock;
 import io.trino.spi.procedure.Procedure;
@@ -42,8 +43,6 @@ import 
org.apache.gravitino.trino.connector.catalog.CatalogConnectorContext;
 import org.apache.gravitino.trino.connector.catalog.CatalogConnectorManager;
 import org.apache.gravitino.trino.connector.metadata.GravitinoCatalog;
 import org.apache.gravitino.trino.connector.system.table.GravitinoSystemTable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Stored procedure implementation for altering an existing catalog in 
Gravitino.
@@ -51,7 +50,7 @@ import org.slf4j.LoggerFactory;
  * <p>This procedure allows setting and removing catalog properties 
dynamically.
  */
 public class AlterCatalogStoredProcedure extends GravitinoStoredProcedure {
-  private static final Logger LOG = 
LoggerFactory.getLogger(AlterCatalogStoredProcedure.class);
+  private static final Logger LOG = 
Logger.get(AlterCatalogStoredProcedure.class);
 
   private final CatalogConnectorManager catalogConnectorManager;
   private final String metalake;
@@ -147,7 +146,7 @@ public class AlterCatalogStoredProcedure extends 
GravitinoStoredProcedure {
             GravitinoErrorCode.GRAVITINO_OPERATION_FAILED,
             "Update catalog failed due to the reloading process fails");
       }
-      LOG.info("Alter catalog {} in metalake {} successfully.", catalogName, 
metalake);
+      LOG.info("Alter catalog %s in metalake %s successfully.", catalogName, 
metalake);
 
     } catch (NoSuchMetalakeException e) {
       throw new TrinoException(
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/system/storedprocedure/CreateCatalogStoredProcedure.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/system/storedprocedure/CreateCatalogStoredProcedure.java
index 0de2383d95..48c67c729c 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/system/storedprocedure/CreateCatalogStoredProcedure.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/system/storedprocedure/CreateCatalogStoredProcedure.java
@@ -21,6 +21,7 @@ package 
org.apache.gravitino.trino.connector.system.storedprocedure;
 import static io.trino.spi.type.BooleanType.BOOLEAN;
 import static io.trino.spi.type.VarcharType.VARCHAR;
 
+import io.airlift.log.Logger;
 import io.trino.spi.TrinoException;
 import io.trino.spi.procedure.Procedure;
 import io.trino.spi.type.MapType;
@@ -37,8 +38,6 @@ import 
org.apache.gravitino.exceptions.NoSuchMetalakeException;
 import org.apache.gravitino.trino.connector.GravitinoErrorCode;
 import org.apache.gravitino.trino.connector.catalog.CatalogConnectorManager;
 import org.apache.gravitino.trino.connector.system.table.GravitinoSystemTable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Stored procedure implementation for creating a new catalog in Gravitino.
@@ -46,7 +45,7 @@ import org.slf4j.LoggerFactory;
  * <p>This procedure allows creating a new catalog with specified properties 
and provider.
  */
 public class CreateCatalogStoredProcedure extends GravitinoStoredProcedure {
-  private static final Logger LOG = 
LoggerFactory.getLogger(CreateCatalogStoredProcedure.class);
+  private static final Logger LOG = 
Logger.get(CreateCatalogStoredProcedure.class);
 
   private final CatalogConnectorManager catalogConnectorManager;
   private final String metalake;
@@ -122,7 +121,7 @@ public class CreateCatalogStoredProcedure extends 
GravitinoStoredProcedure {
             "Create catalog failed due to the loading process fails");
       }
 
-      LOG.info("Create catalog {} in metalake {} successfully.", catalogName, 
metalake);
+      LOG.info("Create catalog %s in metalake %s successfully.", catalogName, 
metalake);
 
     } catch (NoSuchMetalakeException e) {
       throw new TrinoException(
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/system/storedprocedure/DropCatalogStoredProcedure.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/system/storedprocedure/DropCatalogStoredProcedure.java
index 85feea0072..c6646de1f0 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/system/storedprocedure/DropCatalogStoredProcedure.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/system/storedprocedure/DropCatalogStoredProcedure.java
@@ -21,6 +21,7 @@ package 
org.apache.gravitino.trino.connector.system.storedprocedure;
 import static io.trino.spi.type.BooleanType.BOOLEAN;
 import static io.trino.spi.type.VarcharType.VARCHAR;
 
+import io.airlift.log.Logger;
 import io.trino.spi.TrinoException;
 import io.trino.spi.procedure.Procedure;
 import java.lang.invoke.MethodHandle;
@@ -33,8 +34,6 @@ import 
org.apache.gravitino.trino.connector.GravitinoErrorCode;
 import org.apache.gravitino.trino.connector.catalog.CatalogConnectorContext;
 import org.apache.gravitino.trino.connector.catalog.CatalogConnectorManager;
 import org.apache.gravitino.trino.connector.system.table.GravitinoSystemTable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Stored procedure implementation for dropping an existing catalog in 
Gravitino.
@@ -42,7 +41,7 @@ import org.slf4j.LoggerFactory;
  * <p>This procedure allows dropping a catalog with optional ignoreNotExist 
flag.
  */
 public class DropCatalogStoredProcedure extends GravitinoStoredProcedure {
-  private static final Logger LOG = 
LoggerFactory.getLogger(DropCatalogStoredProcedure.class);
+  private static final Logger LOG = 
Logger.get(DropCatalogStoredProcedure.class);
 
   private final CatalogConnectorManager catalogConnectorManager;
   private final String metalake;
@@ -103,9 +102,8 @@ public class DropCatalogStoredProcedure extends 
GravitinoStoredProcedure {
               "Catalog " + NameIdentifier.of(metalake, catalogName) + " not 
exists.");
         }
         LOG.info(
-            "Drop catalog {} in metalake {} from server (no local connector) 
successfully.",
-            catalogName,
-            metalake);
+            "Drop catalog %s in metalake %s from server (no local connector) 
successfully.",
+            catalogName, metalake);
         return;
       }
 
@@ -122,7 +120,7 @@ public class DropCatalogStoredProcedure extends 
GravitinoStoredProcedure {
             "Drop catalog failed due to the reloading process fails");
       }
 
-      LOG.info("Drop catalog {} in metalake {} successfully.", catalogName, 
metalake);
+      LOG.info("Drop catalog %s in metalake %s successfully.", catalogName, 
metalake);
 
     } catch (NoSuchMetalakeException e) {
       throw new TrinoException(
diff --git 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/util/json/JsonCodec.java
 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/util/json/JsonCodec.java
index 00de547b70..0be9dfe73f 100644
--- 
a/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/util/json/JsonCodec.java
+++ 
b/trino-connector/trino-connector/src/main/java/org/apache/gravitino/trino/connector/util/json/JsonCodec.java
@@ -32,6 +32,7 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
 import com.fasterxml.jackson.module.paramnames.ParameterNamesModule;
 import com.google.common.annotations.VisibleForTesting;
 import io.airlift.json.RecordAutoDetectModule;
+import io.airlift.log.Logger;
 import io.trino.spi.TrinoException;
 import io.trino.spi.block.Block;
 import io.trino.spi.block.BlockEncodingSerde;
@@ -54,8 +55,6 @@ import java.util.Collections;
 import java.util.Set;
 import java.util.function.Function;
 import org.apache.gravitino.trino.connector.GravitinoConnectorPluginManager;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Utility class for JSON serialization and deserialization in the Gravitino 
Trino connector.
@@ -63,7 +62,7 @@ import org.slf4j.LoggerFactory;
  */
 public class JsonCodec {
 
-  private static final Logger LOG = LoggerFactory.getLogger(JsonCodec.class);
+  private static final Logger LOG = Logger.get(JsonCodec.class);
   private static volatile ObjectMapper mapper;
   private static volatile Type jsonType;
 
@@ -191,7 +190,7 @@ public class JsonCodec {
 
       try {
         Object instance = ctor.newInstance(args);
-        LOG.debug("Instantiated BlockEncodingManager with fallback constructor 
{}", ctor);
+        LOG.debug("Instantiated BlockEncodingManager with fallback constructor 
%s", ctor);
         return instance;
       } catch (ReflectiveOperationException | RuntimeException e) {
         lastError =

Reply via email to