/**
* <a href="http://www.openolat.org">
* OpenOLAT - Online Learning and Training</a><br>
* <p>
* Licensed under the Apache License, Version 2.0 (the "License"); <br>
* you may not use this file except in compliance with the License.<br>
* You may obtain a copy of the License at the
* <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
* <p>
* Unless required by applicable law or agreed to in writing,<br>
* software distributed under the License is distributed on an "AS IS" BASIS, <br>
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
* See the License for the specific language governing permissions and <br>
* limitations under the License.
* <p>
* Initial code contributed and copyrighted by<br>
* frentix GmbH, http://www.frentix.com
* <p>
*/
package org.olat.admin.sysinfo;
import java.util.List;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.components.Component;
import org.olat.core.gui.components.link.Link;
import org.olat.core.gui.components.link.LinkFactory;
import org.olat.core.gui.components.velocity.VelocityContainer;
import org.olat.core.gui.control.Controller;
import org.olat.core.gui.control.Event;
import org.olat.core.gui.control.WindowControl;
import org.olat.core.gui.control.controller.BasicController;
import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
import org.olat.core.logging.LogRealTimeViewerController;
import org.olat.core.logging.Tracing;
/**
*
* Initial date: 16.11.2012<br>
* @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
*
*/
public class ErrorLogLevelController extends BasicController {
private static final String ACTION_SETLEVEL = "setlevel";
private static final String ACTION_VIEWLOG = "viewlog";
private static final String ACTION_VIEWLOG_PACKAGE = "p";
private Link resetloglevelsButton;
private final VelocityContainer myLoglevels;
private CloseableModalController cmc;
private LogRealTimeViewerController logViewerCtr;
public ErrorLogLevelController(UserRequest ureq, WindowControl wControl) {
super(ureq, wControl);
myLoglevels = createVelocityContainer("loglevels");
resetloglevelsButton = LinkFactory.createButton("resetloglevels", myLoglevels, this);
putInitialPanel(myLoglevels);
loadModel();
}
@Override
protected void doDispose() {
//
}
private void loadModel() {
List<Logger> loggers = Tracing.getLoggersSortedByName(); // put it in a list in case of a reload (enum can only be used once)
myLoglevels.contextPut("loggers", loggers);
}
@Override
protected void event(UserRequest ureq, Component source, Event event) {
if (source == myLoglevels) {
if (event.getCommand().equals(ACTION_SETLEVEL)) {
String level = ureq.getHttpReq().getParameter("level");
String logger = ureq.getHttpReq().getParameter("logger");
if (logger.equals(org.olat.core.logging.Tracing.class.getName())) {
getWindowControl().setError("log level of "+org.olat.core.logging.Tracing.class.getName()+" must not be changed!");
return;
}
Level l;
if (level.equals("debug")) l = Level.DEBUG;
else if (level.equals("info")) l = Level.INFO;
else if (level.equals("warn")) l = Level.WARN;
else l = Level.ERROR;
Tracing.setLevelForLogger(l, logger);
getWindowControl().setInfo("Set logger " + logger + " to level " + level);
} else if (event.getCommand().equals(ACTION_VIEWLOG)) {
String toBeViewed = ureq.getParameter(ACTION_VIEWLOG_PACKAGE);
if (toBeViewed == null) return; // should not happen
if (logViewerCtr != null) logViewerCtr.dispose();
logViewerCtr = new LogRealTimeViewerController(ureq, getWindowControl(), toBeViewed, Level.ALL, true);
if (cmc != null) cmc.dispose();
cmc = new CloseableModalController(getWindowControl(), getTranslator().translate("close"), logViewerCtr.getInitialComponent());
cmc.addControllerListener(this);
cmc.activate();
}
} else if (source == resetloglevelsButton){
Tracing.setLevelForAllLoggers(Level.INFO);
getWindowControl().setInfo("All loglevels set to INFO");
}
}
/**
* @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest, org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
*/
public void event(UserRequest ureq, Controller source, Event event) {
if (source == cmc) {
cmc.dispose();
cmc = null;
if (logViewerCtr != null) {
logViewerCtr.dispose();
logViewerCtr = null;
}
}
}
}