You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2021/10/19 11:08:13 UTC

[maven] branch logger-levels-config created (now 06b2341)

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

cstamas pushed a change to branch logger-levels-config
in repository https://gitbox.apache.org/repos/asf/maven.git.


      at 06b2341  Expose logging levels configuration

This branch includes the following new commits:

     new 06b2341  Expose logging levels configuration

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[maven] 01/01: Expose logging levels configuration

Posted by cs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch logger-levels-config
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 06b23410bd4421fc73c1911eb4ccb436546a3bf6
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Tue Oct 19 13:07:26 2021 +0200

    Expose logging levels configuration
    
    This is just an example how to expose logger levels (by logger name)
    to configure their levels.
---
 .../main/java/org/apache/maven/cli/CLIManager.java   |  5 ++++-
 .../src/main/java/org/apache/maven/cli/MavenCli.java | 13 +++++++++++++
 .../maven/cli/logging/BaseSlf4jConfiguration.java    |  8 ++++++++
 .../apache/maven/cli/logging/Slf4jConfiguration.java |  8 ++++++++
 .../maven/cli/logging/impl/Log4j2Configuration.java  |  8 +++++++-
 .../maven/cli/logging/impl/LogbackConfiguration.java | 12 +++++++++++-
 .../cli/logging/impl/Slf4jSimpleConfiguration.java   | 20 +++++++++++++++++++-
 7 files changed, 70 insertions(+), 4 deletions(-)

diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
index e15af81..89c6783 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/CLIManager.java
@@ -110,6 +110,8 @@ public class CLIManager
 
     public static final String COLOR = "color";
 
+    public static final String VERBOSE_LOGGERS = "XL";
+
     /** This option is deprecated and may be repurposed as Java debug in a future version.
      * Use {@code -X/--verbose} instead. */
     @Deprecated
@@ -127,7 +129,7 @@ public class CLIManager
         options.addOption( Option.builder( Character.toString( OFFLINE ) ).longOpt( "offline" ).desc( "Work offline" ).build() );
         options.addOption( Option.builder( Character.toString( VERSION ) ).longOpt( "version" ).desc( "Display version information" ).build() );
         options.addOption( Option.builder( Character.toString( QUIET ) ).longOpt( "quiet" ).desc( "Quiet output - only show errors" ).build() );
-        options.addOption( Option.builder( Character.toString( VERBOSE ) ).longOpt( "verbose" ).longOpt( "verbose" ).desc( "Produce execution verbose output" ).build() );
+        options.addOption( Option.builder( Character.toString( VERBOSE ) ).longOpt( "verbose" ).desc( "Produce execution verbose output" ).build() );
         options.addOption( Option.builder( Character.toString( ERRORS ) ).longOpt( "errors" ).desc( "Produce execution error messages" ).build() );
         options.addOption( Option.builder( Character.toString( NON_RECURSIVE ) ).longOpt( "non-recursive" ).desc( "Do not recurse into sub-projects. When used together with -pl, do not recurse into sub-projects of selected aggregators" ).build() );
         options.addOption( Option.builder( Character.toString( UPDATE_SNAPSHOTS ) ).longOpt( "update-snapshots" ).desc( "Forces a check for missing releases and updated snapshots on remote repositories" ).build() );
@@ -158,6 +160,7 @@ public class CLIManager
         options.addOption( Option.builder( BUILDER ).longOpt( "builder" ).hasArg().desc( "The id of the build strategy to use" ).build() );
         options.addOption( Option.builder( NO_TRANSFER_PROGRESS ).longOpt( "no-transfer-progress" ).desc( "Do not display transfer progress when downloading or uploading" ).build() );
         options.addOption( Option.builder().longOpt( COLOR ).hasArg().optionalArg( true ).desc( "Defines the color mode of the output. Supported are 'auto', 'always', 'never'." ).build() );
+        options.addOption( Option.builder( VERBOSE_LOGGERS ).longOpt( "verboseLoggers" ).hasArg().desc( "Produce verbose output for loggers (comma separated list of logger names)" ).build() );
 
         // Deprecated
         options.addOption( Option.builder().longOpt( DEBUG ).desc( "Produce execution verbose output (deprecated; only kept for backward compatibility)" ).build() );
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
index ead1331..44779fa 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/MavenCli.java
@@ -511,6 +511,19 @@ public class MavenCli
         slf4jLoggerFactory = LoggerFactory.getILoggerFactory();
         Slf4jConfiguration slf4jConfiguration = Slf4jConfigurationFactory.getConfiguration( slf4jLoggerFactory );
 
+        String[] verboseLoggers = null;
+        if ( cliRequest.commandLine.hasOption( CLIManager.VERBOSE_LOGGERS ) )
+        {
+            verboseLoggers = cliRequest.commandLine.getOptionValues( CLIManager.VERBOSE_LOGGERS );
+        }
+        if ( verboseLoggers != null )
+        {
+            for ( String verboseLogger : verboseLoggers )
+            {
+                slf4jConfiguration.setLoggerLevel( verboseLogger, Slf4jConfiguration.Level.DEBUG );
+            }
+        }
+
         if ( cliRequest.verbose )
         {
             cliRequest.request.setLoggingLevel( MavenExecutionRequest.LOGGING_LEVEL_DEBUG );
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/BaseSlf4jConfiguration.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/BaseSlf4jConfiguration.java
index 33c47c2..2782289 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/BaseSlf4jConfiguration.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/BaseSlf4jConfiguration.java
@@ -33,11 +33,19 @@ public class BaseSlf4jConfiguration
 {
     private static final Logger LOGGER = LoggerFactory.getLogger( BaseSlf4jConfiguration.class );
 
+    @Override
     public void setRootLoggerLevel( Level level )
     {
         LOGGER.warn( "setRootLoggerLevel: operation not supported" );
     }
 
+    @Override
+    public void setLoggerLevel( final String loggerName, final Level level )
+    {
+        LOGGER.warn( "setLoggerLevel: operation not supported" );
+    }
+
+    @Override
     public void activate()
     {
         LOGGER.warn( "reset(): operation not supported" );
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfiguration.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfiguration.java
index 8dc81c7..8922cb9 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfiguration.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/Slf4jConfiguration.java
@@ -44,6 +44,14 @@ public interface Slf4jConfiguration
     void setRootLoggerLevel( Level level );
 
     /**
+     * Set logging level for given logger name.
+
+     * @param loggerName the logger name.
+     * @param level the level.
+     */
+    void setLoggerLevel( String loggerName, Level level );
+
+    /**
      * Activate logging implementation configuration (if necessary).
      */
     void activate();
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Log4j2Configuration.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Log4j2Configuration.java
index b24ea9c..05a7f07 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Log4j2Configuration.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Log4j2Configuration.java
@@ -33,6 +33,12 @@ public class Log4j2Configuration
     @Override
     public void setRootLoggerLevel( Level level )
     {
+        setLoggerLevel( "root", level );
+    }
+
+    @Override
+    public void setLoggerLevel( final String loggerName, final Level level )
+    {
         String value;
         switch ( level )
         {
@@ -48,7 +54,7 @@ public class Log4j2Configuration
                 value = "error";
                 break;
         }
-        System.setProperty( "maven.logging.root.level", value );
+        System.setProperty( "maven.logging." + loggerName +  ".level", value );
     }
 
     @Override
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/LogbackConfiguration.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/LogbackConfiguration.java
index 5d9fab7..b1a918a 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/LogbackConfiguration.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/LogbackConfiguration.java
@@ -23,6 +23,8 @@ import org.apache.maven.cli.logging.BaseSlf4jConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  * Configuration for slf4j-logback.
  *
@@ -35,6 +37,14 @@ public class LogbackConfiguration
     @Override
     public void setRootLoggerLevel( Level level )
     {
+        setLoggerLevel( Logger.ROOT_LOGGER_NAME, level );
+    }
+
+    @Override
+    public void setLoggerLevel( final String loggerName, final Level level )
+    {
+        requireNonNull( loggerName );
+        requireNonNull( level );
         ch.qos.logback.classic.Level value;
         switch ( level )
         {
@@ -50,7 +60,7 @@ public class LogbackConfiguration
                 value = ch.qos.logback.classic.Level.ERROR;
                 break;
         }
-        ( (ch.qos.logback.classic.Logger) LoggerFactory.getLogger( Logger.ROOT_LOGGER_NAME ) ).setLevel( value );
+        ( ( ch.qos.logback.classic.Logger ) LoggerFactory.getLogger( loggerName ) ).setLevel( value );
     }
 
     @Override
diff --git a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
index 3961059..4996b8a 100644
--- a/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
+++ b/maven-embedder/src/main/java/org/apache/maven/cli/logging/impl/Slf4jSimpleConfiguration.java
@@ -23,6 +23,8 @@ import org.apache.maven.cli.logging.BaseSlf4jConfiguration;
 import org.slf4j.MavenSlf4jFriend;
 import org.slf4j.impl.MavenSlf4jSimpleFriend;
 
+import static java.util.Objects.requireNonNull;
+
 /**
  * Configuration for slf4j-simple.
  *
@@ -35,6 +37,22 @@ public class Slf4jSimpleConfiguration
     @Override
     public void setRootLoggerLevel( Level level )
     {
+        requireNonNull( level );
+        setSlf4jSimpleLoggerLevel( "defaultLogLevel", level );
+    }
+
+    @Override
+    public void setLoggerLevel( final String loggerName, final Level level )
+    {
+        requireNonNull( loggerName );
+        requireNonNull( level );
+        setSlf4jSimpleLoggerLevel( "log." + loggerName, level );
+    }
+
+    private void setSlf4jSimpleLoggerLevel( final String loggerName, final Level level )
+    {
+        requireNonNull( loggerName );
+        requireNonNull( level );
         String value;
         switch ( level )
         {
@@ -50,7 +68,7 @@ public class Slf4jSimpleConfiguration
                 value = "error";
                 break;
         }
-        System.setProperty( "org.slf4j.simpleLogger.defaultLogLevel", value );
+        System.setProperty( "org.slf4j.simpleLogger." + loggerName, value );
     }
 
     @Override