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 c34bd8132125592429330307241cb0bc54821162 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 +++++++++++++++- .../java/org/apache/maven/plugins/pmd/exec/Executor.java | 13 +++++++++++++ 3 files changed, 29 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 d8f902c..6bcf115 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 @@ -52,6 +52,19 @@ abstract class Executor { private java.util.logging.Logger julLogger; 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; }