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

mimaison pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 071e916330b MINOR: Move Log4jControllerRegistration to server module 
(#22779)
071e916330b is described below

commit 071e916330b9be5dc2865f3ebade7b8141423d03
Author: majialong <[email protected]>
AuthorDate: Wed Jul 15 19:35:35 2026 +0800

    MINOR: Move Log4jControllerRegistration to server module (#22779)
    
    Move `Log4jControllerRegistration` from core to the server module.
    
    Reviewers: Mickael Maison <[email protected]>, Chia-Ping Tsai
     <[email protected]>
---
 core/src/main/scala/kafka/utils/Logging.scala      | 21 +---------
 .../server/logger/Log4jControllerRegistration.java | 49 ++++++++++++++++++++++
 .../kafka/server/logger/LoggingController.java     |  5 +--
 3 files changed, 53 insertions(+), 22 deletions(-)

diff --git a/core/src/main/scala/kafka/utils/Logging.scala 
b/core/src/main/scala/kafka/utils/Logging.scala
index cc51cdcc422..9915e61c7f8 100755
--- a/core/src/main/scala/kafka/utils/Logging.scala
+++ b/core/src/main/scala/kafka/utils/Logging.scala
@@ -18,26 +18,9 @@
 package kafka.utils
 
 import com.typesafe.scalalogging.Logger
-import org.apache.kafka.common.utils.Utils
-import org.apache.kafka.server.logger.LoggingController
+import org.apache.kafka.server.logger.Log4jControllerRegistration
 import org.slf4j.{LoggerFactory, Marker, MarkerFactory}
 
-object Log4jControllerRegistration {
-  private val logger = Logger(this.getClass.getName)
-
-  private val loggingMBean = new LoggingController
-  registerMBean(loggingMBean, "kafka.Log4jController")
-
-  private def registerMBean(mbean: LoggingController, typeAttr: String): Unit 
= {
-    try {
-      Utils.registerMBean(mbean, s"kafka:type=$typeAttr")
-      logger.info("Registered `kafka:type={}` MBean", typeAttr)
-    } catch {
-      case e: Exception => logger.warn("Couldn't register `kafka:type={}` 
MBean", typeAttr, e)
-    }
-  }
-}
-
 private object Logging {
   private val FatalMarker: Marker = MarkerFactory.getMarker("FATAL")
 }
@@ -48,7 +31,7 @@ trait Logging {
 
   protected var logIdent: String = _
 
-  Log4jControllerRegistration
+  Log4jControllerRegistration.register()
 
   protected def loggerName: String = getClass.getName
 
diff --git 
a/server/src/main/java/org/apache/kafka/server/logger/Log4jControllerRegistration.java
 
b/server/src/main/java/org/apache/kafka/server/logger/Log4jControllerRegistration.java
new file mode 100644
index 00000000000..a6a309f10c5
--- /dev/null
+++ 
b/server/src/main/java/org/apache/kafka/server/logger/Log4jControllerRegistration.java
@@ -0,0 +1,49 @@
+/*
+ * 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.kafka.server.logger;
+
+import org.apache.kafka.common.utils.Utils;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Registers the {@link LoggingController} MBean, which lets users dynamically 
alter log4j levels
+ * at runtime. The MBean is registered only once, on the first call to {@link 
#register()}.
+ */
+public final class Log4jControllerRegistration {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(Log4jControllerRegistration.class);
+
+    private static final AtomicBoolean REGISTERED = new AtomicBoolean(false);
+
+    private static final String MBEAN_TYPE = "kafka.Log4jController";
+    private static final String MBEAN_NAME = "kafka:type=" + MBEAN_TYPE;
+
+    private Log4jControllerRegistration() {
+    }
+
+    public static void register() {
+        if (REGISTERED.compareAndSet(false, true)) {
+            if (Utils.registerMBean(new LoggingController(), MBEAN_NAME)) {
+                LOGGER.info("Registered `{}` MBean", MBEAN_NAME);
+            }
+        }
+    }
+}
diff --git 
a/server/src/main/java/org/apache/kafka/server/logger/LoggingController.java 
b/server/src/main/java/org/apache/kafka/server/logger/LoggingController.java
index fba75b10c07..8b531a42dd5 100644
--- a/server/src/main/java/org/apache/kafka/server/logger/LoggingController.java
+++ b/server/src/main/java/org/apache/kafka/server/logger/LoggingController.java
@@ -25,9 +25,8 @@ import java.util.Map;
 
 /**
  * An MBean that allows the user to dynamically alter log4j levels at runtime.
- * The companion object contains the singleton instance of this class and
- * registers the MBean. The {@code kafka.utils.Logging} trait forces 
initialization
- * of the companion object.
+ * {@link Log4jControllerRegistration} registers this MBean. The {@code 
kafka.utils.Logging}
+ * trait invokes the registration helper during initialization.
  */
 public class LoggingController implements LoggingControllerMBean {
 

Reply via email to