Skip to content

Commit

Permalink
[FIXED JENKINS-19396] use less verbose logging format for Maven 3 builds
Browse files Browse the repository at this point in the history
  • Loading branch information
kutzi committed Oct 19, 2013
1 parent 6f80083 commit d8862d4
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 15 deletions.
17 changes: 16 additions & 1 deletion src/main/java/hudson/maven/Maven3Builder.java
Expand Up @@ -48,6 +48,8 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.ConsoleHandler;
import java.util.logging.Handler;
import java.util.logging.Logger;

import org.apache.maven.eventspy.EventSpy;
Expand Down Expand Up @@ -103,6 +105,8 @@ protected static class Maven3BuilderRequest {
}

public Result call() throws IOException {

configureConsoleLogging();

try {
initializeAsynchronousExecutions();
Expand Down Expand Up @@ -182,7 +186,18 @@ public Result call() throws IOException {
}
}

private static final class JenkinsEventSpy extends MavenExecutionListener implements EventSpy,Serializable{
// worakround for verbose logging https://issues.jenkins-ci.org/browse/JENKINS-19396
private void configureConsoleLogging() {
Logger rootLogger = Logger.getLogger("");
Handler[] handlers = rootLogger.getHandlers();
for (Handler h : handlers) {
if (h instanceof ConsoleHandler) {
((ConsoleHandler)h).setFormatter(new MavenConsoleFormatter());
}
}
}

private static final class JenkinsEventSpy extends MavenExecutionListener implements EventSpy,Serializable{
private static final long serialVersionUID = 4942789836756366117L;

public JenkinsEventSpy(AbstractMavenBuilder maven3Builder) {
Expand Down
36 changes: 36 additions & 0 deletions src/main/java/hudson/maven/MavenConsoleFormatter.java
@@ -0,0 +1,36 @@
package hudson.maven;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;

public class MavenConsoleFormatter extends Formatter {

This comment has been minimized.

Copy link
@kutzi

kutzi Oct 21, 2013

Author Member

Note to self: shouldn't be public, so that I doesn't become part of the API


// Line separator string. This is the value of the line.separator
// property at the moment that the SimpleFormatter was created.
private final String lineSeparator = System.getProperty("line.separator");

@Override
public String format(LogRecord record) {
String message = formatMessage(record);
String level = record.getLevel() == Level.SEVERE ? "ERROR" : record.getLevel().getName();
String logMsg = "[" + level
+ "] "
+ message
+ lineSeparator;
if (record.getThrown() != null) {
try {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
record.getThrown().printStackTrace(pw);
pw.close();
logMsg += sw.toString();
} catch (Exception ex) {
}
}
return logMsg;
}

}
14 changes: 0 additions & 14 deletions src/main/java/hudson/maven/MavenModuleSetBuild.java
Expand Up @@ -582,18 +582,6 @@ public String getMavenOpts(TaskListener listener, EnvVars envVars) {
return envVars.expand(expandTokens(listener, project.getMavenOpts()));
}

// Maven 3 logs via java.util.logging which has a quite verbose default format
// https://issues.jenkins-ci.org/browse/JENKINS-19396
private String maven3VerboseLoggingWorkaround(String mavenOpts) {
if (mavenOpts==null) {
return " -Djava.util.logging.SimpleFormatter.format=\"%4$s: %5$s%6$s%n\"";
} else if (mavenOpts.contains("-Djava.util.logging.SimpleFormatter.format")) {
return mavenOpts;
} else {
return mavenOpts + " -Djava.util.logging.SimpleFormatter.format=\"%4$s: %5$s%6$s%n\"";
}
}

/**
* The sole job of the {@link MavenModuleSet} build is to update SCM
* and triggers module builds.
Expand Down Expand Up @@ -734,15 +722,13 @@ protected Result doRun(final BuildListener listener) throws Exception {
break;
case MAVEN_3_0_X:
LOGGER.fine( "using maven 3 " + mavenVersion );
mavenOpts = maven3VerboseLoggingWorkaround(mavenOpts);
factory = new Maven3ProcessFactory( project, MavenModuleSetBuild.this, launcher, envVars, mavenOpts,
pom.getParent() );
maven3MainClass = Maven3Main.class;
maven3LauncherClass = Maven3Launcher.class;
break;
default:
LOGGER.fine( "using maven 3 " + mavenVersion );
mavenOpts = maven3VerboseLoggingWorkaround(mavenOpts);
factory = new Maven31ProcessFactory( project, MavenModuleSetBuild.this, launcher, envVars, mavenOpts,
pom.getParent() );
maven3MainClass = Maven31Main.class;
Expand Down

0 comments on commit d8862d4

Please sign in to comment.