[core] Hack to get Ant's log level
- Very ugly, uses reflection and is limited to the few implementatations that come with Ant itself or and testutils - Intended as a starting point for fixing #1018
This commit is contained in:
@@ -12,8 +12,6 @@ import java.util.ArrayList;
|
|||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.logging.Handler;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@@ -271,8 +269,8 @@ public class PMDTaskImpl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void execute() throws BuildException {
|
public void execute() throws BuildException {
|
||||||
final Handler antLogHandler = new AntLogHandler(project);
|
final AntLogHandler antLogHandler = new AntLogHandler(project);
|
||||||
final ScopedLogHandlersManager logManager = new ScopedLogHandlersManager(Level.FINEST, antLogHandler);
|
final ScopedLogHandlersManager logManager = new ScopedLogHandlersManager(antLogHandler.getAntLogLevel(), antLogHandler);
|
||||||
try {
|
try {
|
||||||
doTask();
|
doTask();
|
||||||
} finally {
|
} finally {
|
||||||
|
@@ -6,11 +6,13 @@ package net.sourceforge.pmd.util.log;
|
|||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.util.logging.Formatter;
|
import java.util.logging.Formatter;
|
||||||
import java.util.logging.Handler;
|
import java.util.logging.Handler;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.LogRecord;
|
import java.util.logging.LogRecord;
|
||||||
|
|
||||||
|
import org.apache.tools.ant.BuildListener;
|
||||||
import org.apache.tools.ant.Project;
|
import org.apache.tools.ant.Project;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -23,10 +25,52 @@ public class AntLogHandler extends Handler {
|
|||||||
private Project project;
|
private Project project;
|
||||||
|
|
||||||
private static final Formatter FORMATTER = new PmdLogFormatter();
|
private static final Formatter FORMATTER = new PmdLogFormatter();
|
||||||
|
private static final Level[] LOG_LEVELS = new Level[] {
|
||||||
|
Level.SEVERE, Level.WARNING, Level.INFO, Level.CONFIG, Level.FINEST,
|
||||||
|
};
|
||||||
|
|
||||||
public AntLogHandler(Project project) {
|
public AntLogHandler(Project project) {
|
||||||
this.project = project;
|
this.project = project;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Level getAntLogLevel() {
|
||||||
|
Class<?> clazz;
|
||||||
|
int maxLevel = Project.MSG_ERR;
|
||||||
|
for (final BuildListener l : project.getBuildListeners()) {
|
||||||
|
clazz = l.getClass();
|
||||||
|
Field declaredField = null;
|
||||||
|
try {
|
||||||
|
while (BuildListener.class.isAssignableFrom(clazz)) {
|
||||||
|
try {
|
||||||
|
declaredField = l.getClass().getDeclaredField("msgOutputLevel");
|
||||||
|
} catch (final NoSuchFieldException ignored) {
|
||||||
|
try {
|
||||||
|
declaredField = l.getClass().getDeclaredField("logLevel");
|
||||||
|
} catch (final NoSuchFieldException expected) {
|
||||||
|
// ignore it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (declaredField != null) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
clazz = clazz.getSuperclass();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (declaredField != null) {
|
||||||
|
declaredField.setAccessible(true);
|
||||||
|
final int level = declaredField.getInt(l);
|
||||||
|
if (maxLevel < level) {
|
||||||
|
maxLevel = level;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (final IllegalArgumentException | IllegalAccessException ignored) {
|
||||||
|
// Just ignore it
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return LOG_LEVELS[maxLevel];
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void publish(LogRecord logRecord) {
|
public void publish(LogRecord logRecord) {
|
||||||
|
Reference in New Issue
Block a user