Browse Source
git-svn-id: https://svn.apache.org/repos/asf/incubator/kafka/trunk@1377172 13f79535-47bb-0310-9956-ffa450edef68pull/9/head
Jun Rao
12 years ago
5 changed files with 106 additions and 8 deletions
@ -0,0 +1,98 @@
@@ -0,0 +1,98 @@
|
||||
/** |
||||
* 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 kafka.utils |
||||
|
||||
|
||||
import org.apache.log4j.{Logger, Level, LogManager} |
||||
import java.util |
||||
|
||||
|
||||
object Log4jController { |
||||
|
||||
private val controller = new Log4jController |
||||
|
||||
Utils.registerMBean(controller, "kafka:type=kafka.Log4jController") |
||||
|
||||
} |
||||
|
||||
|
||||
/** |
||||
* 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 [[kafka.utils.Logging]] trait forces initialization |
||||
* of the companion object. |
||||
*/ |
||||
private class Log4jController extends Log4jControllerMBean { |
||||
|
||||
def getLoggers = { |
||||
val lst = new util.ArrayList[String]() |
||||
lst.add("root=" + existingLogger("root").getLevel.toString) |
||||
val loggers = LogManager.getCurrentLoggers |
||||
while (loggers.hasMoreElements) { |
||||
val logger = loggers.nextElement().asInstanceOf[Logger] |
||||
if (logger != null) { |
||||
val level = if (logger != null) logger.getLevel else null |
||||
lst.add("%s=%s".format(logger.getName, if (level != null) level.toString else "null")) |
||||
} |
||||
} |
||||
lst |
||||
} |
||||
|
||||
|
||||
private def newLogger(loggerName: String) = |
||||
if (loggerName == "root") |
||||
LogManager.getRootLogger |
||||
else LogManager.getLogger(loggerName) |
||||
|
||||
|
||||
private def existingLogger(loggerName: String) = |
||||
if (loggerName == "root") |
||||
LogManager.getRootLogger |
||||
else LogManager.exists(loggerName) |
||||
|
||||
|
||||
def getLogLevel(loggerName: String) = { |
||||
val log = existingLogger(loggerName) |
||||
if (log != null) { |
||||
val level = log.getLevel |
||||
if (level != null) |
||||
log.getLevel.toString |
||||
else "Null log level." |
||||
} |
||||
else "No such logger." |
||||
} |
||||
|
||||
|
||||
def setLogLevel(loggerName: String, level: String) = { |
||||
val log = newLogger(loggerName) |
||||
if (!loggerName.trim.isEmpty && !level.trim.isEmpty && log != null) { |
||||
log.setLevel(Level.toLevel(level.toUpperCase)) |
||||
true |
||||
} |
||||
else false |
||||
} |
||||
|
||||
} |
||||
|
||||
|
||||
private trait Log4jControllerMBean { |
||||
def getLoggers: java.util.List[String] |
||||
def getLogLevel(logger: String): String |
||||
def setLogLevel(logger: String, level: String): Boolean |
||||
} |
||||
|
Loading…
Reference in new issue