[MCHECKSTYLE-408] Audit events should use Maven logging
This closes #155
diff --git a/src/main/java/org/apache/maven/plugins/checkstyle/AbstractCheckstyleReport.java b/src/main/java/org/apache/maven/plugins/checkstyle/AbstractCheckstyleReport.java
index ad25d6d..4ab9e05 100644
--- a/src/main/java/org/apache/maven/plugins/checkstyle/AbstractCheckstyleReport.java
+++ b/src/main/java/org/apache/maven/plugins/checkstyle/AbstractCheckstyleReport.java
@@ -661,12 +661,11 @@
* @return The console listener.
* @throws MavenReportException If something goes wrong.
*/
- protected DefaultLogger getConsoleListener() throws MavenReportException {
- DefaultLogger consoleListener;
+ protected AuditListener getConsoleListener() throws MavenReportException {
+ AuditListener consoleListener;
if (useFile == null) {
- stringOutputStream = new ByteArrayOutputStream();
- consoleListener = new DefaultLogger(stringOutputStream, OutputStreamOptions.NONE);
+ consoleListener = new MavenConsoleLogger(getLog());
} else {
OutputStream out = getOutputStream(useFile);
diff --git a/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleAggregateReport.java b/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleAggregateReport.java
index 232e248..d914415 100644
--- a/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleAggregateReport.java
+++ b/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleAggregateReport.java
@@ -58,7 +58,6 @@
.setSourceDirectories(getSourceDirectories())
.setResources(resources)
.setTestResources(testResources)
- .setStringOutputStream(stringOutputStream)
.setSuppressionsLocation(suppressionsLocation)
.setTestSourceDirectories(getTestSourceDirectories())
.setPropertyExpansion(propertyExpansion)
diff --git a/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleReport.java b/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleReport.java
index ed575f4..b99abf2 100644
--- a/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleReport.java
+++ b/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleReport.java
@@ -58,7 +58,6 @@
.setSourceDirectories(getSourceDirectories())
.setResources(resources)
.setTestResources(testResources)
- .setStringOutputStream(stringOutputStream)
.setSuppressionsLocation(suppressionsLocation)
.setTestSourceDirectories(getTestSourceDirectories())
.setPropertyExpansion(propertyExpansion)
diff --git a/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleViolationCheckMojo.java b/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleViolationCheckMojo.java
index 14c8443..21a9802 100644
--- a/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleViolationCheckMojo.java
+++ b/src/main/java/org/apache/maven/plugins/checkstyle/CheckstyleViolationCheckMojo.java
@@ -19,7 +19,6 @@
package org.apache.maven.plugins.checkstyle;
import java.io.BufferedReader;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
@@ -486,7 +485,7 @@
@Parameter(property = "checkstyle.excludeGeneratedSources", defaultValue = "false")
private boolean excludeGeneratedSources;
- private ByteArrayOutputStream stringOutputStream;
+ private AuditListener auditListener;
private File outputXmlFile;
@@ -541,7 +540,6 @@
.setSourceDirectories(getSourceDirectories())
.setResources(resources)
.setTestResources(testResources)
- .setStringOutputStream(stringOutputStream)
.setSuppressionsLocation(suppressionsLocation)
.setTestSourceDirectories(getTestSourceDirectories())
.setConfigLocation(effectiveConfigLocation)
@@ -747,12 +745,11 @@
return false;
}
- private DefaultLogger getConsoleListener() throws MojoExecutionException {
- DefaultLogger consoleListener;
+ private AuditListener getConsoleListener() throws MojoExecutionException {
+ AuditListener consoleListener;
if (useFile == null) {
- stringOutputStream = new ByteArrayOutputStream();
- consoleListener = new DefaultLogger(stringOutputStream, OutputStreamOptions.NONE);
+ consoleListener = new MavenConsoleLogger(getLog());
} else {
OutputStream out = getOutputStream(useFile);
diff --git a/src/main/java/org/apache/maven/plugins/checkstyle/MavenConsoleLogger.java b/src/main/java/org/apache/maven/plugins/checkstyle/MavenConsoleLogger.java
new file mode 100644
index 0000000..9b56464
--- /dev/null
+++ b/src/main/java/org/apache/maven/plugins/checkstyle/MavenConsoleLogger.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.plugins.checkstyle;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.util.function.Consumer;
+
+import com.puppycrawl.tools.checkstyle.DefaultLogger;
+import com.puppycrawl.tools.checkstyle.api.AuditEvent;
+import com.puppycrawl.tools.checkstyle.api.AuditListener;
+import com.puppycrawl.tools.checkstyle.api.AutomaticBean.OutputStreamOptions;
+import org.apache.maven.plugin.logging.Log;
+
+/** An implementation of {@link AuditListener} that redirects output to the specified {@code log} */
+public class MavenConsoleLogger implements AuditListener {
+ private final Log log;
+
+ public MavenConsoleLogger(Log log) {
+ this.log = log;
+ }
+
+ @Override
+ public void auditStarted(AuditEvent event) {
+ recordMessage(delegate -> delegate.auditStarted(event));
+ }
+
+ @Override
+ public void auditFinished(AuditEvent event) {
+ recordMessage(delegate -> delegate.auditFinished(event));
+ }
+
+ @Override
+ public void fileStarted(AuditEvent event) {
+ recordMessage(delegate -> delegate.fileStarted(event));
+ }
+
+ @Override
+ public void fileFinished(AuditEvent event) {
+ recordMessage(delegate -> delegate.fileFinished(event));
+ }
+
+ @Override
+ public void addError(AuditEvent event) {
+ recordMessage(delegate -> delegate.addError(event));
+ }
+
+ @Override
+ public void addException(AuditEvent event, Throwable throwable) {
+ recordMessage(delegate -> delegate.addException(event, throwable));
+ }
+
+ private void recordMessage(Consumer<AuditListener> consumer) {
+ if (log.isInfoEnabled()) {
+ // Uses DefaultLogger for consistency
+ // Not possible to access formatting directly, so instead log out to a buffer and read that back in
+ try (ByteArrayOutputStream stream = new ByteArrayOutputStream()) {
+ consumer.accept(new DefaultLogger(stream, OutputStreamOptions.NONE));
+
+ if (stream.size() != 0) {
+ log.info(stream.toString().trim());
+ }
+ } catch (IOException e) {
+ throw new UncheckedIOException(e);
+ }
+ }
+ }
+}
diff --git a/src/main/java/org/apache/maven/plugins/checkstyle/exec/CheckstyleExecutorRequest.java b/src/main/java/org/apache/maven/plugins/checkstyle/exec/CheckstyleExecutorRequest.java
index c168a2e..0b1b9f3 100644
--- a/src/main/java/org/apache/maven/plugins/checkstyle/exec/CheckstyleExecutorRequest.java
+++ b/src/main/java/org/apache/maven/plugins/checkstyle/exec/CheckstyleExecutorRequest.java
@@ -18,12 +18,10 @@
*/
package org.apache.maven.plugins.checkstyle.exec;
-import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.Collection;
import java.util.List;
-import com.puppycrawl.tools.checkstyle.DefaultLogger;
import com.puppycrawl.tools.checkstyle.api.AuditListener;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.model.Resource;
@@ -80,9 +78,7 @@
private boolean consoleOutput;
- private DefaultLogger defaultLogger;
-
- private ByteArrayOutputStream stringOutputStream;
+ private AuditListener auditListener;
private String propertiesLocation;
@@ -263,22 +259,13 @@
return this;
}
- public CheckstyleExecutorRequest setConsoleListener(DefaultLogger defaultLogger) {
- this.defaultLogger = defaultLogger;
+ public CheckstyleExecutorRequest setConsoleListener(AuditListener auditListener) {
+ this.auditListener = auditListener;
return this;
}
- public DefaultLogger getConsoleListener() {
- return this.defaultLogger;
- }
-
- public ByteArrayOutputStream getStringOutputStream() {
- return stringOutputStream;
- }
-
- public CheckstyleExecutorRequest setStringOutputStream(ByteArrayOutputStream stringOutputStream) {
- this.stringOutputStream = stringOutputStream;
- return this;
+ public AuditListener getConsoleListener() {
+ return this.auditListener;
}
public String getConfigLocation() {
diff --git a/src/main/java/org/apache/maven/plugins/checkstyle/exec/DefaultCheckstyleExecutor.java b/src/main/java/org/apache/maven/plugins/checkstyle/exec/DefaultCheckstyleExecutor.java
index 4eb28b7..1ad2bac 100644
--- a/src/main/java/org/apache/maven/plugins/checkstyle/exec/DefaultCheckstyleExecutor.java
+++ b/src/main/java/org/apache/maven/plugins/checkstyle/exec/DefaultCheckstyleExecutor.java
@@ -183,14 +183,6 @@
checker.destroy();
- if (request.getStringOutputStream() != null) {
- String message = request.getStringOutputStream().toString().trim();
-
- if (message.length() > 0) {
- getLogger().info(message);
- }
- }
-
if (nbErrors > 0) {
StringBuilder message = new StringBuilder("There ");
if (nbErrors == 1) {