/**
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
*/
package net.sourceforge.pmd.util.log;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import org.apache.tools.ant.Project;
/**
* AntLogHandler sends log messages to an Ant Task, so the regular Ant logging
* is used.
*
* @author Wouter Zelle
*/
public class AntLogHandler extends Handler {
private Project project;
private static final Formatter FORMATTER = new PmdLogFormatter();
public AntLogHandler(Project project) {
this.project = project;
}
@Override
public void publish(LogRecord logRecord) {
// Map the log levels from java.util.logging to Ant
int antLevel;
Level level = logRecord.getLevel();
if (level == Level.FINEST) {
antLevel = Project.MSG_DEBUG; // Shown when -debug is supplied to
// Ant
} else if (level == Level.FINE || level == Level.FINER || level == Level.CONFIG) {
antLevel = Project.MSG_VERBOSE; // Shown when -verbose is supplied
// to Ant
} else if (level == Level.INFO) {
antLevel = Project.MSG_INFO; // Always shown
} else if (level == Level.WARNING) {
antLevel = Project.MSG_WARN; // Always shown
} else if (level == Level.SEVERE) {
antLevel = Project.MSG_ERR; // Always shown
} else {
throw new IllegalStateException("Unknown logging level"); // shouldn't
// get ALL
// or NONE
}
project.log(FORMATTER.format(logRecord), antLevel);
if (logRecord.getThrown() != null) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter, true);
logRecord.getThrown().printStackTrace(printWriter);
project.log(stringWriter.toString(), antLevel);
}
}
@Override
public void close() throws SecurityException {
}
@Override
public void flush() {
}
}