Skip to content

Instantly share code, notes, and snippets.

@fbaligand
Created March 16, 2013 11:22
Show Gist options
  • Save fbaligand/5176007 to your computer and use it in GitHub Desktop.
Save fbaligand/5176007 to your computer and use it in GitHub Desktop.
Composant Spring permettant de consulter/modifier la configuration LOG4J de son application via JMX
package com.fbaligand.log4j.jmx;
import java.util.Enumeration;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedOperationParameter;
import org.springframework.jmx.export.annotation.ManagedOperationParameters;
import org.springframework.jmx.export.annotation.ManagedResource;
/**
* Classe MBean permettant par JMX, de :
* - modifier le niveau de log d'un logger LOG4J
* - recharger la configuration LOG4J par défaut
*/
@ManagedResource(description="Log4j Configuration Management")
public class Log4jManagement {
/**
* modifie à <code>level</code>, le niveau de log du logger <code>loggerName</code>
* @param loggerName nom du logger dont on souhaite modifier le niveau de log
* @param level nouveau niveau de log du logger
*/
@ManagedOperation(description="Update the log level of a logger")
@ManagedOperationParameters({
@ManagedOperationParameter(name = "loggerName", description = "name of the logger"),
@ManagedOperationParameter(name = "level", description = "log4j level to set to the logger")
})
public void setLogLevel(String loggerName, String level) {
Logger.getLogger(loggerName).setLevel(Level.toLevel(level));
}
/**
* retourne le niveau de log du logger <code>loggerName</code>
* @param loggerName nom du logger dont on souhaite récupérer le niveau de log
*/
@ManagedOperation(description="get the log level of a logger")
@ManagedOperationParameters({
@ManagedOperationParameter(name = "loggerName", description = "name of the logger")
})
public String getLogLevel(String loggerName) {
Level loggerLevel = Logger.getLogger(loggerName).getLevel();
return loggerLevel != null ? loggerLevel.toString() : null;
}
/**
* retourne la liste de tous les loggers avec leur niveau de log sous forme de properties
*/
@ManagedOperation(description="get the list of all log4j loggers")
@SuppressWarnings("unchecked")
public String getAllLoggers() {
Enumeration<Logger> currentLoggers = LogManager.getCurrentLoggers();
StringBuilder loggers = new StringBuilder();
while (currentLoggers.hasMoreElements()) {
String loggerName = currentLoggers.nextElement().getName();
Level loggerLevel = Logger.getLogger(loggerName).getLevel();
if (loggerLevel != null) {
loggers.append(loggerName)
.append("=")
.append(loggerLevel.toString())
.append("\n");
}
}
return loggers.toString();
}
/**
* recharge/réinitialise la configuration par défaut LOG4J
*/
@ManagedOperation(description="Reinitialize the log4j configuration")
public void reinitializeConfiguration() {
PropertyConfigurator.configure(getClass().getResource("/log4j.properties"));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment