/******************************************************************************* * Copyright (c) 2007, 2014 compeople AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * compeople AG - initial API and implementation *******************************************************************************/ package org.eclipse.riena.core.logging.log4j; import java.io.PrintWriter; import java.io.StringWriter; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.eclipse.osgi.framework.console.CommandInterpreter; import org.eclipse.osgi.framework.console.CommandProvider; /** * A {@code LogFilter} where the log level threshold can be set thru its command * provider interface. */ public class Log4jCommandProvider implements CommandProvider { private static final String ROOT_LOGGER_NAME = "ROOT"; //$NON-NLS-1$ /** * log4jLevel command. See {@link #getHelp()} for details. * * @param intp */ public void _log4jLevel(final CommandInterpreter intp) { final String category = intp.nextArgument(); String loglevel = intp.nextArgument(); final String categoryForDisplay = category == null ? ROOT_LOGGER_NAME : category; final Logger logger = category == null || category.equals(ROOT_LOGGER_NAME) ? Logger.getRootLogger() : Logger .getLogger(category); if (loglevel == null) { intp.println(String.format("LogLevel for %s is %s", categoryForDisplay, getLogLevelString(logger))); //$NON-NLS-1$ } else { loglevel = loglevel.toUpperCase(); final Level newLevel = Level.toLevel(loglevel); if (newLevel.toString().equals(loglevel)) { logger.setLevel(newLevel); intp.println(String.format("LogLevel for %s set to %s", categoryForDisplay, getLogLevelString(logger))); //$NON-NLS-1$ } else { intp.println(String.format("LogLevel for %s is %s (not changed to unknown level %s)", //$NON-NLS-1$ categoryForDisplay, getLogLevelString(logger), loglevel)); } } } private String getLogLevelString(final Logger logger) { if (logger == null) { return "OFF"; //$NON-NLS-1$ } else if (logger.isEnabledFor(Level.ALL)) { return "ALL"; //$NON-NLS-1$ } else if (logger.isEnabledFor(Level.DEBUG)) { return "DEBUG"; //$NON-NLS-1$ } else if (logger.isEnabledFor(Level.INFO)) { return "INFO"; //$NON-NLS-1$ } else if (logger.isEnabledFor(Level.WARN)) { return "WARN"; //$NON-NLS-1$ } else if (logger.isEnabledFor(Level.ERROR)) { return "ERROR"; //$NON-NLS-1$ } else if (logger.isEnabledFor(Level.OFF)) { return "OFF"; //$NON-NLS-1$ } return "UNKNOWN"; //$NON-NLS-1$ } /* * (non-Javadoc) * * @see org.eclipse.osgi.framework.console.CommandProvider#getHelp() */ public String getHelp() { final StringWriter stringWriter = new StringWriter(); final PrintWriter writer = new PrintWriter(stringWriter); writer.println("---Log4j configuration---"); //$NON-NLS-1$ writer.println("\tlog4jLevel - display log level of root category (same as 'log4jLevel ROOT')"); //$NON-NLS-1$ writer.println("\tlog4jLevel (ROOT|<category>) - display log level for specified category"); //$NON-NLS-1$ writer.println("\tlog4jLevel (ROOT|<category>) (DEBUG|INFO|WARN|ERROR) - set log level for specified category"); //$NON-NLS-1$ writer.close(); return stringWriter.toString(); } }