in src/main/java/org/apache/sling/commons/log/logback/internal/SlingLogPanel.java [606:655]
private void configureLogger(final String pid, final String logLevel, final String[] loggers, final String
logFile, boolean additive)
throws IOException, ConfigurationException {
// try to get the configadmin service reference
ServiceReference sr = this.bundleContext
.getServiceReference(ConfigurationAdmin.class.getName());
if (sr != null) {
try {
if (logLevel == null) {
throw new ConfigurationException(LogConfigManager.LOG_LEVEL,
"Log level has to be specified.");
}
if (loggers == null) {
throw new ConfigurationException(LogConfigManager.LOG_LOGGERS,
"Logger categories have to be specified.");
}
if (logFile == null) {
throw new ConfigurationException(LogConfigManager.LOG_FILE,
"LogFile name has to be specified.");
}
// try to get the configadmin
final ConfigurationAdmin configAdmin = (ConfigurationAdmin) this.bundleContext
.getService(sr);
if (configAdmin != null) {
Configuration config;
if (pid == null || pid.length() == 0) {
config = configAdmin.createFactoryConfiguration(LogConfigManager.FACTORY_PID_CONFIGS);
} else {
config = configAdmin.getConfiguration(pid);
}
if (config != null) {
Dictionary<String, Object> dict = new Hashtable<String, Object>();
dict.put(LogConfigManager.LOG_LEVEL, logLevel.toLowerCase());
dict.put(LogConfigManager.LOG_LOGGERS, loggers);
dict.put(LogConfigManager.LOG_FILE, logFile);
if (additive){
dict.put(LogConfigManager.LOG_ADDITIV, "true");
} else {
dict.put(LogConfigManager.LOG_ADDITIV, "false");
}
config.update(dict);
}
}
} finally {
// release the configadmin reference
this.bundleContext.ungetService(sr);
}
}
}