package io.dropwizard.servlets.tasks;

import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.LoggerContext;
import com.google.common.collect.ImmutableMultimap;
import org.slf4j.ILoggerFactory;
import org.slf4j.LoggerFactory;

import javax.annotation.Nullable;
import java.io.PrintWriter;
import java.util.List;

Sets the logging level for a number of loggers

Parameters:

Name Description
logger One or more logger names to be configured with the specified log level.
level An optional Level to configure. If not provided, the log level will be set to null.

/** * Sets the logging level for a number of loggers * <p> * <b>Parameters:</b> * <table> * <tr> * <td>Name</td> * <td>Description</td> * </tr> * <tr> * <td>logger</td> * <td>One or more logger names to be configured with the specified log level.</td> * </tr> * <tr> * <td>level</td> * <td>An optional {@link Level} to configure. If not provided, the log level will be set to null.</td> * </tr> * </table> * </p> */
public class LogConfigurationTask extends Task { private final ILoggerFactory loggerContext;
Creates a new LogConfigurationTask.
/** * Creates a new LogConfigurationTask. */
public LogConfigurationTask() { this(LoggerFactory.getILoggerFactory()); }
Creates a new LogConfigurationTask with the given ILoggerFactory instance.

Use LogConfigurationTask() instead.
Params:
/** * Creates a new LogConfigurationTask with the given {@link ILoggerFactory} instance. * <p/> * <b>Use {@link LogConfigurationTask#LogConfigurationTask()} instead.</b> * * @param loggerContext a {@link ILoggerFactory} instance */
public LogConfigurationTask(ILoggerFactory loggerContext) { super("log-level"); this.loggerContext = loggerContext; } @Override public void execute(ImmutableMultimap<String, String> parameters, PrintWriter output) throws Exception { final List<String> loggerNames = getLoggerNames(parameters); final Level loggerLevel = getLoggerLevel(parameters); for (String loggerName : loggerNames) { ((LoggerContext) loggerContext).getLogger(loggerName).setLevel(loggerLevel); output.println(String.format("Configured logging level for %s to %s", loggerName, loggerLevel)); output.flush(); } } private List<String> getLoggerNames(ImmutableMultimap<String, String> parameters) { return parameters.get("logger").asList(); } @Nullable private Level getLoggerLevel(ImmutableMultimap<String, String> parameters) { final List<String> loggerLevels = parameters.get("level").asList(); return loggerLevels.isEmpty() ? null : Level.valueOf(loggerLevels.get(0)); } }