package rocks.inspectit.shared.cs.ci.sensor.method.impl; import java.util.Arrays; import java.util.Collections; import java.util.Map; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import org.apache.commons.lang.ArrayUtils; import rocks.inspectit.shared.all.instrumentation.config.PriorityEnum; import rocks.inspectit.shared.cs.ci.sensor.method.AbstractMethodSensorConfig; import rocks.inspectit.shared.cs.ci.sensor.method.ILoggingSensorConfig; import rocks.inspectit.shared.cs.ci.sensor.method.IMethodSensorConfig; /** * @author Ivan Senic * */ @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "log4j-logging-sensor-config") public class Log4jLoggingSensorConfig extends AbstractMethodSensorConfig implements IMethodSensorConfig, ILoggingSensorConfig { /** * Sensor name. */ public static final String SENSOR_NAME = "Logging Sensor for log4j"; /** * Implementing class name. */ public static final String CLASS_NAME = "rocks.inspectit.agent.java.sensor.method.logging.Log4JLoggingSensor"; /** * Name of the logging technology. */ private static final String TECHNOLOGY_NAME = "log4j"; /** * Available levels. */ private static final String[] LEVELS = new String[] { "FATAL", "ERROR", "WARN", "INFO", "DEBUG", "TRACE" }; /** * Min logging level to capture. * <p> * Default value is {@value #minLevel}. */ @XmlAttribute(name = "minLevel", required = true) private String minLevel = "WARN"; /** * {@inheritDoc} */ @Override public String getClassName() { return CLASS_NAME; } /** * {@inheritDoc} */ @Override public String getName() { return SENSOR_NAME; } /** * {@inheritDoc} */ @Override public PriorityEnum getPriority() { return PriorityEnum.MIN; } /** * {@inheritDoc} */ @Override public boolean isAdvanced() { return true; } /** * {@inheritDoc} * <p> * Sub-classes can override, by calling super and adding parameters to the returned map. */ @Override public Map<String, Object> getParameters() { return Collections.<String, Object> singletonMap("minlevel", minLevel); } /** * {@inheritDoc} */ @Override public String getTechnologyName() { return TECHNOLOGY_NAME; } /** * {@inheritDoc} */ @Override public String[] getLogLevels() { return LEVELS; } /** * {@inheritDoc} */ @Override public String getMinLevel() { return minLevel; } /** * {@inheritDoc} */ @Override public void setMinLevel(String minLevel) throws IllegalArgumentException { if (!ArrayUtils.contains(LEVELS, minLevel)) { throw new IllegalArgumentException("Level to set must be one of the: " + Arrays.toString(LEVELS)); } this.minLevel = minLevel; } }