[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) {