You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ad...@apache.org on 2023/01/17 18:33:19 UTC

[maven-pmd-plugin] 03/08: Improve logging integration

This is an automated email from the ASF dual-hosted git repository.

adangel pushed a commit to branch pmd7
in repository https://gitbox.apache.org/repos/asf/maven-pmd-plugin.git

commit f7e7c789f3695435664450bf06903ed428570c5f
Author: Andreas Dangel <ad...@apache.org>
AuthorDate: Fri Jun 10 11:11:01 2022 +0200

    Improve logging integration
---
 src/it/MPMD-244-logging/invoker.properties              |  1 +
 src/it/MPMD-244-logging/verify.groovy                   | 16 +++++++++++++++-
 .../org/apache/maven/plugins/pmd/exec/Executor.java     | 17 +++++++++++++++++
 3 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/src/it/MPMD-244-logging/invoker.properties b/src/it/MPMD-244-logging/invoker.properties
index d57dce3..38b6d74 100644
--- a/src/it/MPMD-244-logging/invoker.properties
+++ b/src/it/MPMD-244-logging/invoker.properties
@@ -16,5 +16,6 @@
 # under the License.
 
 invoker.goals = clean pmd:check
+invoker.goals.2 = pmd:check --projects logging-enabled --log-file build2.log
 invoker.maven.version = 3.1.0+
 invoker.debug = true
diff --git a/src/it/MPMD-244-logging/verify.groovy b/src/it/MPMD-244-logging/verify.groovy
index e561fb8..daa1091 100644
--- a/src/it/MPMD-244-logging/verify.groovy
+++ b/src/it/MPMD-244-logging/verify.groovy
@@ -27,5 +27,19 @@ String enabledPath = new File( basedir, 'logging-enabled/src/main/java/BrokenFil
 
 // logging disabled: the pmd exception is only output through the processing error reporting (since MPMD-246)
 assert 1 == buildLog.text.count( "${disabledPath}: ParseException: Encountered" )
+
+// TODO: with PMD 7, the parse exception is not logged through PMD's logging anymore, it is only added as a processing error
+// in the report. is this correct?
 // logging enabled: the pmd exception is output twice: through the processing error reporting (since MPMD-246) and through PMD's own logging
-assert 2 == buildLog.text.count( "${enabledPath}: ParseException: Encountered" )
+// assert 2 == buildLog.text.count( "${enabledPath}: ParseException: Encountered" )
+assert 1 == buildLog.text.count( "${enabledPath}: ParseException: Encountered" )
+
+// logging disabled module is executed first, which disables the logging
+// even when logging-enabled is executed afterwards in the same JVM, the logger are not reinitialized
+// everywhere, so logging is most likely still disabled.
+assert 0 == buildLog.text.count( "[DEBUG] Rules loaded from" )
+
+// only in the second invoker run, when only logging-enabled is executed, the logs from PMD are visible
+File build2Log = new File( basedir, 'build2.log' )
+assert build2Log.exists()
+assert 1 == build2Log.text.count( "[DEBUG] Rules loaded from" )
diff --git a/src/main/java/org/apache/maven/plugins/pmd/exec/Executor.java b/src/main/java/org/apache/maven/plugins/pmd/exec/Executor.java
index 3b3679c..150eb6f 100644
--- a/src/main/java/org/apache/maven/plugins/pmd/exec/Executor.java
+++ b/src/main/java/org/apache/maven/plugins/pmd/exec/Executor.java
@@ -55,6 +55,23 @@ abstract class Executor
 
     protected void setupPmdLogging( boolean showPmdLog, String logLevel )
     {
+
+        // TODO: enabling/disabling the log doesn't work reliably, because
+        // the log level is cached at each logger and the logger instances
+        // are usually static.
+        if ( !showPmdLog )
+        {
+            System.setProperty( "org.slf4j.simpleLogger.log.net.sourceforge.pmd", "off" );
+        }
+        else
+        {
+            System.clearProperty( "org.slf4j.simpleLogger.log.net.sourceforge.pmd" );
+        }
+        ILoggerFactory slf4jLoggerFactory = LoggerFactory.getILoggerFactory();
+        Slf4jConfiguration slf4jConfiguration = Slf4jConfigurationFactory
+                .getConfiguration( slf4jLoggerFactory );
+        slf4jConfiguration.activate();
+
         if ( !showPmdLog )
         {
             return;