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 <adan...@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;