You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2016/10/11 21:42:04 UTC

maven git commit: MNG-6093 patch slf4j-simple in-place

Repository: maven
Updated Branches:
  refs/heads/MNG-6093 f3835b830 -> bf44e8a05


MNG-6093 patch slf4j-simple in-place

Project: http://git-wip-us.apache.org/repos/asf/maven/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven/commit/bf44e8a0
Tree: http://git-wip-us.apache.org/repos/asf/maven/tree/bf44e8a0
Diff: http://git-wip-us.apache.org/repos/asf/maven/diff/bf44e8a0

Branch: refs/heads/MNG-6093
Commit: bf44e8a05295946b3e4270ff45982661eb06ac23
Parents: f3835b8
Author: Herv� Boutemy <hb...@apache.org>
Authored: Tue Oct 11 23:42:00 2016 +0200
Committer: Herv� Boutemy <hb...@apache.org>
Committed: Tue Oct 11 23:42:00 2016 +0200

----------------------------------------------------------------------
 maven-slf4j-provider/pom.xml                    |  73 +-
 .../slf4j/impl/MavenSimpleLoggerFactory.java    |  37 +-
 .../main/java/org/slf4j/impl/SimpleLogger.java  | 663 -------------------
 .../org/slf4j/impl/SimpleLoggerFactory.java     |  73 --
 .../java/org/slf4j/impl/StaticLoggerBinder.java |  81 ---
 .../java/org/slf4j/impl/StaticMDCBinder.java    |  66 --
 .../java/org/slf4j/impl/StaticMarkerBinder.java |  78 ---
 .../src/main/script/patch-slf4j-simple.groovy   |  53 ++
 8 files changed, 150 insertions(+), 974 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven/blob/bf44e8a0/maven-slf4j-provider/pom.xml
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/pom.xml b/maven-slf4j-provider/pom.xml
index 4688de8..fc7856d 100644
--- a/maven-slf4j-provider/pom.xml
+++ b/maven-slf4j-provider/pom.xml
@@ -33,12 +33,6 @@ under the License.
   <name>Maven SLF4J Simple Provider</name>
   <description>Maven SLF4J provider based on SLF4J's simple provider extended to support colors.</description>
 
-  <properties>
-    <!-- disable rat and Checkstyle -->
-    <rat.skip>true</rat.skip>
-    <checkstyle.skip>true</checkstyle.skip>
-  </properties>
-
   <dependencies>
     <dependency>
       <groupId>org.slf4j</groupId>
@@ -49,4 +43,71 @@ under the License.
       <artifactId>maven-shared-utils</artifactId>
     </dependency>
   </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <configuration>
+          <artifactItems>
+            <artifactItem>
+              <groupId>org.slf4j</groupId>
+              <artifactId>slf4j-simple</artifactId>
+              <version>${slf4jVersion}</version>
+              <type>jar</type>
+              <classifier>sources</classifier>
+              <overWrite>false</overWrite>
+              <outputDirectory>${project.build.directory}/generated-sources/slf4j-simple</outputDirectory>
+              <includes>org/slf4j/impl/*.java</includes>
+            </artifactItem>
+          </artifactItems>
+        </configuration>
+        <executions>
+          <execution>
+            <id>unzip-slf4j-simple</id>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <version>1.12</version>
+        <executions>
+          <execution>
+            <id>add-slf4j-simple</id>
+            <phase>generate-sources</phase>
+            <goals>
+              <goal>add-source</goal>
+            </goals>
+            <configuration>
+              <sources>
+                <source>${project.build.directory}/generated-sources/slf4j-simple</source>
+              </sources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.gmaven</groupId>
+        <artifactId>groovy-maven-plugin</artifactId>
+        <version>2.0</version>
+        <executions>
+          <execution>
+            <id>patch-slf4j-simple</id>
+            <phase>process-sources</phase>
+            <goals>
+              <goal>execute</goal>
+            </goals>
+            <configuration>
+              <source>${project.basedir}/src/main/script/patch-slf4j-simple.groovy</source>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
 </project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/maven/blob/bf44e8a0/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java
index 401d20c..d56e346 100644
--- a/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java
+++ b/maven-slf4j-provider/src/main/java/org/slf4j/impl/MavenSimpleLoggerFactory.java
@@ -1,20 +1,43 @@
 package org.slf4j.impl;
 
+/*
+ * 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.
+ */
+
 import org.slf4j.Logger;
 
 public class MavenSimpleLoggerFactory
     extends SimpleLoggerFactory
 {
     /**
-     * Return an appropriate {@link SimpleLogger} instance by name.
+     * Return an appropriate {@link MavenSimpleLogger} instance by name.
      */
-    public Logger getLogger(String name) {
-        Logger simpleLogger = loggerMap.get(name);
-        if (simpleLogger != null) {
+    public Logger getLogger( String name )
+    {
+        Logger simpleLogger = loggerMap.get( name );
+        if ( simpleLogger != null )
+        {
             return simpleLogger;
-        } else {
-            Logger newInstance = new MavenSimpleLogger(name);
-            Logger oldInstance = loggerMap.putIfAbsent(name, newInstance);
+        }
+        else
+        {
+            Logger newInstance = new MavenSimpleLogger( name );
+            Logger oldInstance = loggerMap.putIfAbsent( name, newInstance );
             return oldInstance == null ? newInstance : oldInstance;
         }
     }

http://git-wip-us.apache.org/repos/asf/maven/blob/bf44e8a0/maven-slf4j-provider/src/main/java/org/slf4j/impl/SimpleLogger.java
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/src/main/java/org/slf4j/impl/SimpleLogger.java b/maven-slf4j-provider/src/main/java/org/slf4j/impl/SimpleLogger.java
deleted file mode 100644
index 7f77332..0000000
--- a/maven-slf4j-provider/src/main/java/org/slf4j/impl/SimpleLogger.java
+++ /dev/null
@@ -1,663 +0,0 @@
-/**
- * Copyright (c) 2004-2012 QOS.ch
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * "Software"), to  deal in  the Software without  restriction, including
- * without limitation  the rights to  use, copy, modify,  merge, publish,
- * distribute,  sublicense, and/or sell  copies of  the Software,  and to
- * permit persons to whom the Software  is furnished to do so, subject to
- * the following conditions:
- *
- * The  above  copyright  notice  and  this permission  notice  shall  be
- * included in all copies or substantial portions of the Software.
- *
- * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-package org.slf4j.impl;
-
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Properties;
-
-import org.slf4j.Logger;
-import org.slf4j.event.LoggingEvent;
-import org.slf4j.helpers.FormattingTuple;
-import org.slf4j.helpers.MarkerIgnoringBase;
-import org.slf4j.helpers.MessageFormatter;
-import org.slf4j.helpers.Util;
-import org.slf4j.spi.LocationAwareLogger;
-
-/**
- * <p>Simple implementation of {@link Logger} that sends all enabled log messages,
- * for all defined loggers, to the console ({@code System.err}).
- * The following system properties are supported to configure the behavior of this logger:</p>
- *
- * <ul>
- * <li><code>org.slf4j.simpleLogger.logFile</code> - The output target which can be the <em>path</em> to a file, or
- * the special values "System.out" and "System.err". Default is "System.err".
- *
- * <li><code>org.slf4j.simpleLogger.defaultLogLevel</code> - Default log level for all instances of SimpleLogger.
- * Must be one of ("trace", "debug", "info", "warn", or "error"). If not specified, defaults to "info". </li>
- *
- * <li><code>org.slf4j.simpleLogger.log.<em>a.b.c</em></code> - Logging detail level for a SimpleLogger instance
- * named "a.b.c". Right-side value must be one of "trace", "debug", "info", "warn", or "error". When a SimpleLogger
- * named "a.b.c" is initialized, its level is assigned from this property. If unspecified, the level of nearest parent
- * logger will be used, and if none is set, then the value specified by
- * <code>org.slf4j.simpleLogger.defaultLogLevel</code> will be used.</li>
- *
- * <li><code>org.slf4j.simpleLogger.showDateTime</code> - Set to <code>true</code> if you want the current date and
- * time to be included in output messages. Default is <code>false</code></li>
- *
- * <li><code>org.slf4j.simpleLogger.dateTimeFormat</code> - The date and time format to be used in the output messages.
- * The pattern describing the date and time format is defined by
- * <a href="http://docs.oracle.com/javase/1.5.0/docs/api/java/text/SimpleDateFormat.html"><code>SimpleDateFormat</code></a>.
- * If the format is not specified or is invalid, the number of milliseconds since start up will be output. </li>
- *
- * <li><code>org.slf4j.simpleLogger.showThreadName</code> -Set to <code>true</code> if you want to output the current
- * thread name. Defaults to <code>true</code>.</li>
- *
- * <li><code>org.slf4j.simpleLogger.showLogName</code> - Set to <code>true</code> if you want the Logger instance name
- * to be included in output messages. Defaults to <code>true</code>.</li>
- *
- * <li><code>org.slf4j.simpleLogger.showShortLogName</code> - Set to <code>true</code> if you want the last component
- * of the name to be included in output messages. Defaults to <code>false</code>.</li>
- *
- * <li><code>org.slf4j.simpleLogger.levelInBrackets</code> - Should the level string be output in brackets? Defaults
- * to <code>false</code>.</li>
- *
- * <li><code>org.slf4j.simpleLogger.warnLevelString</code> - The string value output for the warn level. Defaults
- * to <code>WARN</code>.</li>
-
- * </ul>
- *
- * <p>In addition to looking for system properties with the names specified above, this implementation also checks for
- * a class loader resource named <code>"simplelogger.properties"</code>, and includes any matching definitions
- * from this resource (if it exists).</p>
- *
- * <p>With no configuration, the default output includes the relative time in milliseconds, thread name, the level,
- * logger name, and the message followed by the line separator for the host.  In log4j terms it amounts to the "%r [%t]
- * %level %logger - %m%n" pattern. </p>
- * <p>Sample output follows.</p>
- * <pre>
- * 176 [main] INFO examples.Sort - Populating an array of 2 elements in reverse order.
- * 225 [main] INFO examples.SortAlgo - Entered the sort method.
- * 304 [main] INFO examples.SortAlgo - Dump of integer array:
- * 317 [main] INFO examples.SortAlgo - Element [0] = 0
- * 331 [main] INFO examples.SortAlgo - Element [1] = 1
- * 343 [main] INFO examples.Sort - The next log statement should be an error message.
- * 346 [main] ERROR examples.SortAlgo - Tried to dump an uninitialized array.
- *   at org.log4j.examples.SortAlgo.dump(SortAlgo.java:58)
- *   at org.log4j.examples.Sort.main(Sort.java:64)
- * 467 [main] INFO  examples.Sort - Exiting main method.
- * </pre>
- *
- * <p>This implementation is heavily inspired by
- * <a href="http://commons.apache.org/logging/">Apache Commons Logging</a>'s SimpleLog.</p>
- *
- * @author Ceki G&uuml;lc&uuml;
- * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
- * @author Rod Waldhoff
- * @author Robert Burrell Donkin
- * @author C&eacute;drik LIME
- */
-public class SimpleLogger extends MarkerIgnoringBase {
-
-    private static final long serialVersionUID = -632788891211436180L;
-    private static final String CONFIGURATION_FILE = "simplelogger.properties";
-
-    private static long START_TIME = System.currentTimeMillis();
-    private static final Properties SIMPLE_LOGGER_PROPS = new Properties();
-
-    protected static final int LOG_LEVEL_TRACE = LocationAwareLogger.TRACE_INT;
-    protected static final int LOG_LEVEL_DEBUG = LocationAwareLogger.DEBUG_INT;
-    protected static final int LOG_LEVEL_INFO = LocationAwareLogger.INFO_INT;
-    protected static final int LOG_LEVEL_WARN = LocationAwareLogger.WARN_INT;
-    protected static final int LOG_LEVEL_ERROR = LocationAwareLogger.ERROR_INT;
-
-    private static boolean INITIALIZED = false;
-
-    private static int DEFAULT_LOG_LEVEL = LOG_LEVEL_INFO;
-    private static boolean SHOW_DATE_TIME = false;
-    private static String DATE_TIME_FORMAT_STR = null;
-    private static DateFormat DATE_FORMATTER = null;
-    private static boolean SHOW_THREAD_NAME = true;
-    private static boolean SHOW_LOG_NAME = true;
-    private static boolean SHOW_SHORT_LOG_NAME = false;
-    private static String LOG_FILE = "System.err";
-    private static PrintStream TARGET_STREAM = null;
-    private static boolean LEVEL_IN_BRACKETS = false;
-    private static String WARN_LEVEL_STRING = "WARN";
-
-    /** All system properties used by <code>SimpleLogger</code> start with this prefix */
-    public static final String SYSTEM_PREFIX = "org.slf4j.simpleLogger.";
-
-    public static final String DEFAULT_LOG_LEVEL_KEY = SYSTEM_PREFIX + "defaultLogLevel";
-    public static final String SHOW_DATE_TIME_KEY = SYSTEM_PREFIX + "showDateTime";
-    public static final String DATE_TIME_FORMAT_KEY = SYSTEM_PREFIX + "dateTimeFormat";
-    public static final String SHOW_THREAD_NAME_KEY = SYSTEM_PREFIX + "showThreadName";
-    public static final String SHOW_LOG_NAME_KEY = SYSTEM_PREFIX + "showLogName";
-    public static final String SHOW_SHORT_LOG_NAME_KEY = SYSTEM_PREFIX + "showShortLogName";
-    public static final String LOG_FILE_KEY = SYSTEM_PREFIX + "logFile";
-    public static final String LEVEL_IN_BRACKETS_KEY = SYSTEM_PREFIX + "levelInBrackets";
-    public static final String WARN_LEVEL_STRING_KEY = SYSTEM_PREFIX + "warnLevelString";
-
-    public static final String LOG_KEY_PREFIX = SYSTEM_PREFIX + "log.";
-
-    private static String getStringProperty(String name) {
-        String prop = null;
-        try {
-            prop = System.getProperty(name);
-        } catch (SecurityException e) {
-            ; // Ignore
-        }
-        return (prop == null) ? SIMPLE_LOGGER_PROPS.getProperty(name) : prop;
-    }
-
-    private static String getStringProperty(String name, String defaultValue) {
-        String prop = getStringProperty(name);
-        return (prop == null) ? defaultValue : prop;
-    }
-
-    private static boolean getBooleanProperty(String name, boolean defaultValue) {
-        String prop = getStringProperty(name);
-        return (prop == null) ? defaultValue : "true".equalsIgnoreCase(prop);
-    }
-
-    // Initialize class attributes.
-    // Load properties file, if found.
-    // Override with system properties.
-    static void init() {
-        INITIALIZED = true;
-        loadProperties();
-
-        String defaultLogLevelString = getStringProperty(DEFAULT_LOG_LEVEL_KEY, null);
-        if (defaultLogLevelString != null)
-            DEFAULT_LOG_LEVEL = stringToLevel(defaultLogLevelString);
-
-        SHOW_LOG_NAME = getBooleanProperty(SHOW_LOG_NAME_KEY, SHOW_LOG_NAME);
-        SHOW_SHORT_LOG_NAME = getBooleanProperty(SHOW_SHORT_LOG_NAME_KEY, SHOW_SHORT_LOG_NAME);
-        SHOW_DATE_TIME = getBooleanProperty(SHOW_DATE_TIME_KEY, SHOW_DATE_TIME);
-        SHOW_THREAD_NAME = getBooleanProperty(SHOW_THREAD_NAME_KEY, SHOW_THREAD_NAME);
-        DATE_TIME_FORMAT_STR = getStringProperty(DATE_TIME_FORMAT_KEY, DATE_TIME_FORMAT_STR);
-        LEVEL_IN_BRACKETS = getBooleanProperty(LEVEL_IN_BRACKETS_KEY, LEVEL_IN_BRACKETS);
-        WARN_LEVEL_STRING = getStringProperty(WARN_LEVEL_STRING_KEY, WARN_LEVEL_STRING);
-
-        LOG_FILE = getStringProperty(LOG_FILE_KEY, LOG_FILE);
-        TARGET_STREAM = computeTargetStream(LOG_FILE);
-
-        if (DATE_TIME_FORMAT_STR != null) {
-            try {
-                DATE_FORMATTER = new SimpleDateFormat(DATE_TIME_FORMAT_STR);
-            } catch (IllegalArgumentException e) {
-                Util.report("Bad date format in " + CONFIGURATION_FILE + "; will output relative time", e);
-            }
-        }
-    }
-
-    private static PrintStream computeTargetStream(String logFile) {
-        if ("System.err".equalsIgnoreCase(logFile))
-            return System.err;
-        else if ("System.out".equalsIgnoreCase(logFile)) {
-            return System.out;
-        } else {
-            try {
-                FileOutputStream fos = new FileOutputStream(logFile);
-                PrintStream printStream = new PrintStream(fos);
-                return printStream;
-            } catch (FileNotFoundException e) {
-                Util.report("Could not open [" + logFile + "]. Defaulting to System.err", e);
-                return System.err;
-            }
-        }
-    }
-
-    private static void loadProperties() {
-        // Add props from the resource simplelogger.properties
-        InputStream in = AccessController.doPrivileged(new PrivilegedAction<InputStream>() {
-            public InputStream run() {
-                ClassLoader threadCL = Thread.currentThread().getContextClassLoader();
-                if (threadCL != null) {
-                    return threadCL.getResourceAsStream(CONFIGURATION_FILE);
-                } else {
-                    return ClassLoader.getSystemResourceAsStream(CONFIGURATION_FILE);
-                }
-            }
-        });
-        if (null != in) {
-            try {
-                SIMPLE_LOGGER_PROPS.load(in);
-                in.close();
-            } catch (java.io.IOException e) {
-                // ignored
-            }
-        }
-    }
-
-    /** The current log level */
-    protected int currentLogLevel = LOG_LEVEL_INFO;
-    /** The short name of this simple log instance */
-    private transient String shortLogName = null;
-
-    /**
-     * Package access allows only {@link SimpleLoggerFactory} to instantiate
-     * SimpleLogger instances.
-     */
-    SimpleLogger(String name) {
-        if (!INITIALIZED) {
-            init();
-        }
-        this.name = name;
-
-        String levelString = recursivelyComputeLevelString();
-        if (levelString != null) {
-            this.currentLogLevel = stringToLevel(levelString);
-        } else {
-            this.currentLogLevel = DEFAULT_LOG_LEVEL;
-        }
-    }
-
-    String recursivelyComputeLevelString() {
-        String tempName = name;
-        String levelString = null;
-        int indexOfLastDot = tempName.length();
-        while ((levelString == null) && (indexOfLastDot > -1)) {
-            tempName = tempName.substring(0, indexOfLastDot);
-            levelString = getStringProperty(LOG_KEY_PREFIX + tempName, null);
-            indexOfLastDot = String.valueOf(tempName).lastIndexOf(".");
-        }
-        return levelString;
-    }
-
-    private static int stringToLevel(String levelStr) {
-        if ("trace".equalsIgnoreCase(levelStr)) {
-            return LOG_LEVEL_TRACE;
-        } else if ("debug".equalsIgnoreCase(levelStr)) {
-            return LOG_LEVEL_DEBUG;
-        } else if ("info".equalsIgnoreCase(levelStr)) {
-            return LOG_LEVEL_INFO;
-        } else if ("warn".equalsIgnoreCase(levelStr)) {
-            return LOG_LEVEL_WARN;
-        } else if ("error".equalsIgnoreCase(levelStr)) {
-            return LOG_LEVEL_ERROR;
-        }
-        // assume INFO by default
-        return LOG_LEVEL_INFO;
-    }
-
-    /**
-     * This is our internal implementation for logging regular (non-parameterized)
-     * log messages.
-     *
-     * @param level   One of the LOG_LEVEL_XXX constants defining the log level
-     * @param message The message itself
-     * @param t       The exception whose stack trace should be logged
-     */
-    private void log(int level, String message, Throwable t) {
-        if (!isLevelEnabled(level)) {
-            return;
-        }
-
-        StringBuilder buf = new StringBuilder(32);
-
-        // Append date-time if so configured
-        if (SHOW_DATE_TIME) {
-            if (DATE_FORMATTER != null) {
-                buf.append(getFormattedDate());
-                buf.append(' ');
-            } else {
-                buf.append(System.currentTimeMillis() - START_TIME);
-                buf.append(' ');
-            }
-        }
-
-        // Append current thread name if so configured
-        if (SHOW_THREAD_NAME) {
-            buf.append('[');
-            buf.append(Thread.currentThread().getName());
-            buf.append("] ");
-        }
-
-        if (LEVEL_IN_BRACKETS)
-            buf.append('[');
-
-        // Append a readable representation of the log level
-        buf.append(renderLevel(level));
-        if (LEVEL_IN_BRACKETS)
-            buf.append(']');
-        buf.append(' ');
-
-        // Append the name of the log instance if so configured
-        if (SHOW_SHORT_LOG_NAME) {
-            if (shortLogName == null)
-                shortLogName = computeShortName();
-            buf.append(String.valueOf(shortLogName)).append(" - ");
-        } else if (SHOW_LOG_NAME) {
-            buf.append(String.valueOf(name)).append(" - ");
-        }
-
-        // Append the message
-        buf.append(message);
-
-        write(buf, t);
-
-    }
-
-    protected String renderLevel(int level) {
-        switch (level) {
-        case LOG_LEVEL_TRACE:
-            return "TRACE";
-        case LOG_LEVEL_DEBUG:
-            return"DEBUG";
-        case LOG_LEVEL_INFO:
-            return "INFO";
-        case LOG_LEVEL_WARN:
-            return WARN_LEVEL_STRING;
-        case LOG_LEVEL_ERROR:
-        default:
-            return "ERROR";
-        }
-    }
-
-    protected void renderThrowable(Throwable t, PrintStream stream) {
-        t.printStackTrace(stream);
-    }
-
-    void write(StringBuilder buf, Throwable t) {
-        TARGET_STREAM.println(buf.toString());
-        if (t != null) {
-            renderThrowable(t, TARGET_STREAM);
-        }
-        TARGET_STREAM.flush();
-    }
-
-    private String getFormattedDate() {
-        Date now = new Date();
-        String dateText;
-        synchronized (DATE_FORMATTER) {
-            dateText = DATE_FORMATTER.format(now);
-        }
-        return dateText;
-    }
-
-    private String computeShortName() {
-        return name.substring(name.lastIndexOf(".") + 1);
-    }
-
-    /**
-     * For formatted messages, first substitute arguments and then log.
-     *
-     * @param level
-     * @param format
-     * @param arg1
-     * @param arg2
-     */
-    private void formatAndLog(int level, String format, Object arg1, Object arg2) {
-        if (!isLevelEnabled(level)) {
-            return;
-        }
-        FormattingTuple tp = MessageFormatter.format(format, arg1, arg2);
-        log(level, tp.getMessage(), tp.getThrowable());
-    }
-
-    /**
-     * For formatted messages, first substitute arguments and then log.
-     *
-     * @param level
-     * @param format
-     * @param arguments a list of 3 ore more arguments
-     */
-    private void formatAndLog(int level, String format, Object... arguments) {
-        if (!isLevelEnabled(level)) {
-            return;
-        }
-        FormattingTuple tp = MessageFormatter.arrayFormat(format, arguments);
-        log(level, tp.getMessage(), tp.getThrowable());
-    }
-
-    /**
-     * Is the given log level currently enabled?
-     *
-     * @param logLevel is this level enabled?
-     */
-    protected boolean isLevelEnabled(int logLevel) {
-        // log level are numerically ordered so can use simple numeric
-        // comparison
-        return (logLevel >= currentLogLevel);
-    }
-
-    /** Are {@code trace} messages currently enabled? */
-    public boolean isTraceEnabled() {
-        return isLevelEnabled(LOG_LEVEL_TRACE);
-    }
-
-    /**
-     * A simple implementation which logs messages of level TRACE according
-     * to the format outlined above.
-     */
-    public void trace(String msg) {
-        log(LOG_LEVEL_TRACE, msg, null);
-    }
-
-    /**
-     * Perform single parameter substitution before logging the message of level
-     * TRACE according to the format outlined above.
-     */
-    public void trace(String format, Object param1) {
-        formatAndLog(LOG_LEVEL_TRACE, format, param1, null);
-    }
-
-    /**
-     * Perform double parameter substitution before logging the message of level
-     * TRACE according to the format outlined above.
-     */
-    public void trace(String format, Object param1, Object param2) {
-        formatAndLog(LOG_LEVEL_TRACE, format, param1, param2);
-    }
-
-    /**
-     * Perform double parameter substitution before logging the message of level
-     * TRACE according to the format outlined above.
-     */
-    public void trace(String format, Object... argArray) {
-        formatAndLog(LOG_LEVEL_TRACE, format, argArray);
-    }
-
-    /** Log a message of level TRACE, including an exception. */
-    public void trace(String msg, Throwable t) {
-        log(LOG_LEVEL_TRACE, msg, t);
-    }
-
-    /** Are {@code debug} messages currently enabled? */
-    public boolean isDebugEnabled() {
-        return isLevelEnabled(LOG_LEVEL_DEBUG);
-    }
-
-    /**
-     * A simple implementation which logs messages of level DEBUG according
-     * to the format outlined above.
-     */
-    public void debug(String msg) {
-        log(LOG_LEVEL_DEBUG, msg, null);
-    }
-
-    /**
-     * Perform single parameter substitution before logging the message of level
-     * DEBUG according to the format outlined above.
-     */
-    public void debug(String format, Object param1) {
-        formatAndLog(LOG_LEVEL_DEBUG, format, param1, null);
-    }
-
-    /**
-     * Perform double parameter substitution before logging the message of level
-     * DEBUG according to the format outlined above.
-     */
-    public void debug(String format, Object param1, Object param2) {
-        formatAndLog(LOG_LEVEL_DEBUG, format, param1, param2);
-    }
-
-    /**
-     * Perform double parameter substitution before logging the message of level
-     * DEBUG according to the format outlined above.
-     */
-    public void debug(String format, Object... argArray) {
-        formatAndLog(LOG_LEVEL_DEBUG, format, argArray);
-    }
-
-    /** Log a message of level DEBUG, including an exception. */
-    public void debug(String msg, Throwable t) {
-        log(LOG_LEVEL_DEBUG, msg, t);
-    }
-
-    /** Are {@code info} messages currently enabled? */
-    public boolean isInfoEnabled() {
-        return isLevelEnabled(LOG_LEVEL_INFO);
-    }
-
-    /**
-     * A simple implementation which logs messages of level INFO according
-     * to the format outlined above.
-     */
-    public void info(String msg) {
-        log(LOG_LEVEL_INFO, msg, null);
-    }
-
-    /**
-     * Perform single parameter substitution before logging the message of level
-     * INFO according to the format outlined above.
-     */
-    public void info(String format, Object arg) {
-        formatAndLog(LOG_LEVEL_INFO, format, arg, null);
-    }
-
-    /**
-     * Perform double parameter substitution before logging the message of level
-     * INFO according to the format outlined above.
-     */
-    public void info(String format, Object arg1, Object arg2) {
-        formatAndLog(LOG_LEVEL_INFO, format, arg1, arg2);
-    }
-
-    /**
-     * Perform double parameter substitution before logging the message of level
-     * INFO according to the format outlined above.
-     */
-    public void info(String format, Object... argArray) {
-        formatAndLog(LOG_LEVEL_INFO, format, argArray);
-    }
-
-    /** Log a message of level INFO, including an exception. */
-    public void info(String msg, Throwable t) {
-        log(LOG_LEVEL_INFO, msg, t);
-    }
-
-    /** Are {@code warn} messages currently enabled? */
-    public boolean isWarnEnabled() {
-        return isLevelEnabled(LOG_LEVEL_WARN);
-    }
-
-    /**
-     * A simple implementation which always logs messages of level WARN according
-     * to the format outlined above.
-     */
-    public void warn(String msg) {
-        log(LOG_LEVEL_WARN, msg, null);
-    }
-
-    /**
-     * Perform single parameter substitution before logging the message of level
-     * WARN according to the format outlined above.
-     */
-    public void warn(String format, Object arg) {
-        formatAndLog(LOG_LEVEL_WARN, format, arg, null);
-    }
-
-    /**
-     * Perform double parameter substitution before logging the message of level
-     * WARN according to the format outlined above.
-     */
-    public void warn(String format, Object arg1, Object arg2) {
-        formatAndLog(LOG_LEVEL_WARN, format, arg1, arg2);
-    }
-
-    /**
-     * Perform double parameter substitution before logging the message of level
-     * WARN according to the format outlined above.
-     */
-    public void warn(String format, Object... argArray) {
-        formatAndLog(LOG_LEVEL_WARN, format, argArray);
-    }
-
-    /** Log a message of level WARN, including an exception. */
-    public void warn(String msg, Throwable t) {
-        log(LOG_LEVEL_WARN, msg, t);
-    }
-
-    /** Are {@code error} messages currently enabled? */
-    public boolean isErrorEnabled() {
-        return isLevelEnabled(LOG_LEVEL_ERROR);
-    }
-
-    /**
-     * A simple implementation which always logs messages of level ERROR according
-     * to the format outlined above.
-     */
-    public void error(String msg) {
-        log(LOG_LEVEL_ERROR, msg, null);
-    }
-
-    /**
-     * Perform single parameter substitution before logging the message of level
-     * ERROR according to the format outlined above.
-     */
-    public void error(String format, Object arg) {
-        formatAndLog(LOG_LEVEL_ERROR, format, arg, null);
-    }
-
-    /**
-     * Perform double parameter substitution before logging the message of level
-     * ERROR according to the format outlined above.
-     */
-    public void error(String format, Object arg1, Object arg2) {
-        formatAndLog(LOG_LEVEL_ERROR, format, arg1, arg2);
-    }
-
-    /**
-     * Perform double parameter substitution before logging the message of level
-     * ERROR according to the format outlined above.
-     */
-    public void error(String format, Object... argArray) {
-        formatAndLog(LOG_LEVEL_ERROR, format, argArray);
-    }
-
-    /** Log a message of level ERROR, including an exception. */
-    public void error(String msg, Throwable t) {
-        log(LOG_LEVEL_ERROR, msg, t);
-    }
-
-    public void log(LoggingEvent event) {
-        int levelInt = event.getLevel().toInt();
-        
-        if (!isLevelEnabled(levelInt)) {
-            return;
-        }
-        FormattingTuple tp = MessageFormatter.arrayFormat(event.getMessage(), event.getArgumentArray(), event.getThrowable());
-        log(levelInt, tp.getMessage(), event.getThrowable());
-    }
-}

http://git-wip-us.apache.org/repos/asf/maven/blob/bf44e8a0/maven-slf4j-provider/src/main/java/org/slf4j/impl/SimpleLoggerFactory.java
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/src/main/java/org/slf4j/impl/SimpleLoggerFactory.java b/maven-slf4j-provider/src/main/java/org/slf4j/impl/SimpleLoggerFactory.java
deleted file mode 100644
index 4c59f2d..0000000
--- a/maven-slf4j-provider/src/main/java/org/slf4j/impl/SimpleLoggerFactory.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/**
- * Copyright (c) 2004-2011 QOS.ch
- * All rights reserved.
- *
- * Permission is hereby granted, free  of charge, to any person obtaining
- * a  copy  of this  software  and  associated  documentation files  (the
- * "Software"), to  deal in  the Software without  restriction, including
- * without limitation  the rights to  use, copy, modify,  merge, publish,
- * distribute,  sublicense, and/or sell  copies of  the Software,  and to
- * permit persons to whom the Software  is furnished to do so, subject to
- * the following conditions:
- *
- * The  above  copyright  notice  and  this permission  notice  shall  be
- * included in all copies or substantial portions of the Software.
- *
- * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-package org.slf4j.impl;
-
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import org.slf4j.Logger;
-import org.slf4j.ILoggerFactory;
-
-/**
- * An implementation of {@link ILoggerFactory} which always returns
- * {@link SimpleLogger} instances.
- * 
- * @author Ceki G&uuml;lc&uuml;
- */
-public class SimpleLoggerFactory implements ILoggerFactory {
-
-    ConcurrentMap<String, Logger> loggerMap;
-
-    public SimpleLoggerFactory() {
-        loggerMap = new ConcurrentHashMap<String, Logger>();
-    }
-
-    /**
-     * Return an appropriate {@link SimpleLogger} instance by name.
-     */
-    public Logger getLogger(String name) {
-        Logger simpleLogger = loggerMap.get(name);
-        if (simpleLogger != null) {
-            return simpleLogger;
-        } else {
-            Logger newInstance = new SimpleLogger(name);
-            Logger oldInstance = loggerMap.putIfAbsent(name, newInstance);
-            return oldInstance == null ? newInstance : oldInstance;
-        }
-    }
-
-    /**
-     * Clear the internal logger cache.
-     *
-     * This method is intended to be called by classes (in the same package) for
-     * testing purposes. This method is internal. It can be modified, renamed or
-     * removed at any time without notice.
-     *
-     * You are strongly discouraged from calling this method in production code.
-     */
-    void reset() {
-        loggerMap.clear();
-    }
-}

http://git-wip-us.apache.org/repos/asf/maven/blob/bf44e8a0/maven-slf4j-provider/src/main/java/org/slf4j/impl/StaticLoggerBinder.java
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/src/main/java/org/slf4j/impl/StaticLoggerBinder.java b/maven-slf4j-provider/src/main/java/org/slf4j/impl/StaticLoggerBinder.java
deleted file mode 100644
index d8419fc..0000000
--- a/maven-slf4j-provider/src/main/java/org/slf4j/impl/StaticLoggerBinder.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/**
- * Copyright (c) 2004-2011 QOS.ch
- * All rights reserved.
- *
- * Permission is hereby granted, free  of charge, to any person obtaining
- * a  copy  of this  software  and  associated  documentation files  (the
- * "Software"), to  deal in  the Software without  restriction, including
- * without limitation  the rights to  use, copy, modify,  merge, publish,
- * distribute,  sublicense, and/or sell  copies of  the Software,  and to
- * permit persons to whom the Software  is furnished to do so, subject to
- * the following conditions:
- *
- * The  above  copyright  notice  and  this permission  notice  shall  be
- * included in all copies or substantial portions of the Software.
- *
- * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-package org.slf4j.impl;
-
-import org.slf4j.ILoggerFactory;
-import org.slf4j.LoggerFactory;
-import org.slf4j.spi.LoggerFactoryBinder;
-
-/**
- * The binding of {@link LoggerFactory} class with an actual instance of
- * {@link ILoggerFactory} is performed using information returned by this class.
- * 
- * 
- * @author Ceki G&uuml;lc&uuml;
- */
-public class StaticLoggerBinder implements LoggerFactoryBinder {
-
-    /**
-     * The unique instance of this class.
-     * 
-     */
-    private static final StaticLoggerBinder SINGLETON = new StaticLoggerBinder();
-
-    /**
-     * Return the singleton of this class.
-     * 
-     * @return the StaticLoggerBinder singleton
-     */
-    public static final StaticLoggerBinder getSingleton() {
-        return SINGLETON;
-    }
-
-    /**
-     * Declare the version of the SLF4J API this implementation is compiled against. 
-     * The value of this field is modified with each major release. 
-     */
-    // to avoid constant folding by the compiler, this field must *not* be final
-    public static String REQUESTED_API_VERSION = "1.6.99"; // !final
-
-    private static final String loggerFactoryClassStr = MavenSimpleLoggerFactory.class.getName();
-
-    /**
-     * The ILoggerFactory instance returned by the {@link #getLoggerFactory}
-     * method should always be the same object
-     */
-    private final ILoggerFactory loggerFactory;
-
-    private StaticLoggerBinder() {
-        loggerFactory = new MavenSimpleLoggerFactory();
-    }
-
-    public ILoggerFactory getLoggerFactory() {
-        return loggerFactory;
-    }
-
-    public String getLoggerFactoryClassStr() {
-        return loggerFactoryClassStr;
-    }
-}

http://git-wip-us.apache.org/repos/asf/maven/blob/bf44e8a0/maven-slf4j-provider/src/main/java/org/slf4j/impl/StaticMDCBinder.java
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/src/main/java/org/slf4j/impl/StaticMDCBinder.java b/maven-slf4j-provider/src/main/java/org/slf4j/impl/StaticMDCBinder.java
deleted file mode 100644
index a88f2bf..0000000
--- a/maven-slf4j-provider/src/main/java/org/slf4j/impl/StaticMDCBinder.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/**
- * Copyright (c) 2004-2011 QOS.ch
- * All rights reserved.
- *
- * Permission is hereby granted, free  of charge, to any person obtaining
- * a  copy  of this  software  and  associated  documentation files  (the
- * "Software"), to  deal in  the Software without  restriction, including
- * without limitation  the rights to  use, copy, modify,  merge, publish,
- * distribute,  sublicense, and/or sell  copies of  the Software,  and to
- * permit persons to whom the Software  is furnished to do so, subject to
- * the following conditions:
- *
- * The  above  copyright  notice  and  this permission  notice  shall  be
- * included in all copies or substantial portions of the Software.
- *
- * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-package org.slf4j.impl;
-
-import org.slf4j.helpers.NOPMDCAdapter;
-import org.slf4j.spi.MDCAdapter;
-
-/**
- * This implementation is bound to {@link NOPMDCAdapter}.
- *
- * @author Ceki G&uuml;lc&uuml;
- */
-public class StaticMDCBinder {
-
-    /**
-     * The unique instance of this class.
-     */
-    public static final StaticMDCBinder SINGLETON = new StaticMDCBinder();
-
-    private StaticMDCBinder() {
-    }
-
-    /**
-     * Return the singleton of this class.
-     * 
-     * @return the StaticMDCBinder singleton
-     * @since 1.7.14
-     */
-    public static final StaticMDCBinder getSingleton() {
-        return SINGLETON;
-    }
-
-    /**
-     * Currently this method always returns an instance of 
-     * {@link StaticMDCBinder}.
-     */
-    public MDCAdapter getMDCA() {
-        return new NOPMDCAdapter();
-    }
-
-    public String getMDCAdapterClassStr() {
-        return NOPMDCAdapter.class.getName();
-    }
-}

http://git-wip-us.apache.org/repos/asf/maven/blob/bf44e8a0/maven-slf4j-provider/src/main/java/org/slf4j/impl/StaticMarkerBinder.java
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/src/main/java/org/slf4j/impl/StaticMarkerBinder.java b/maven-slf4j-provider/src/main/java/org/slf4j/impl/StaticMarkerBinder.java
deleted file mode 100644
index ef1a9d9..0000000
--- a/maven-slf4j-provider/src/main/java/org/slf4j/impl/StaticMarkerBinder.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- * Copyright (c) 2004-2011 QOS.ch
- * All rights reserved.
- *
- * Permission is hereby granted, free  of charge, to any person obtaining
- * a  copy  of this  software  and  associated  documentation files  (the
- * "Software"), to  deal in  the Software without  restriction, including
- * without limitation  the rights to  use, copy, modify,  merge, publish,
- * distribute,  sublicense, and/or sell  copies of  the Software,  and to
- * permit persons to whom the Software  is furnished to do so, subject to
- * the following conditions:
- *
- * The  above  copyright  notice  and  this permission  notice  shall  be
- * included in all copies or substantial portions of the Software.
- *
- * THE  SOFTWARE IS  PROVIDED  "AS  IS", WITHOUT  WARRANTY  OF ANY  KIND,
- * EXPRESS OR  IMPLIED, INCLUDING  BUT NOT LIMITED  TO THE  WARRANTIES OF
- * MERCHANTABILITY,    FITNESS    FOR    A   PARTICULAR    PURPOSE    AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE,  ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- */
-
-package org.slf4j.impl;
-
-import org.slf4j.IMarkerFactory;
-import org.slf4j.MarkerFactory;
-import org.slf4j.helpers.BasicMarkerFactory;
-import org.slf4j.spi.MarkerFactoryBinder;
-
-/**
- * 
- * The binding of {@link MarkerFactory} class with an actual instance of 
- * {@link IMarkerFactory} is performed using information returned by this class. 
- * 
- * @author Ceki G&uuml;lc&uuml;
- */
-public class StaticMarkerBinder implements MarkerFactoryBinder {
-
-    /**
-     * The unique instance of this class.
-     */
-    public static final StaticMarkerBinder SINGLETON = new StaticMarkerBinder();
-
-    final IMarkerFactory markerFactory = new BasicMarkerFactory();
-
-    private StaticMarkerBinder() {
-    }
-    
-    /**
-     * Return the singleton of this class.
-     * 
-     * @return the StaticMarkerBinder singleton
-     * @since 1.7.14
-     */
-    public static StaticMarkerBinder getSingleton() {
-        return SINGLETON;
-    }
-    
-    /**
-     * Currently this method always returns an instance of 
-     * {@link BasicMarkerFactory}.
-     */
-    public IMarkerFactory getMarkerFactory() {
-        return markerFactory;
-    }
-
-    /**
-     * Currently, this method returns the class name of
-     * {@link BasicMarkerFactory}.
-     */
-    public String getMarkerFactoryClassStr() {
-        return BasicMarkerFactory.class.getName();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/maven/blob/bf44e8a0/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy
----------------------------------------------------------------------
diff --git a/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy b/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy
new file mode 100644
index 0000000..bba8646
--- /dev/null
+++ b/maven-slf4j-provider/src/main/script/patch-slf4j-simple.groovy
@@ -0,0 +1,53 @@
+
+/*
+ * 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.
+ */
+
+dir = new File( basedir, 'target/generated-sources/slf4j-simple/org/slf4j/impl' );
+
+file = new File( dir, 'StaticLoggerBinder.java' );
+content = file.text;
+
+// check if already patched
+if ( content.contains( 'MavenSimpleLoggerFactory' ) )
+{
+  println '    slf4j-simple already patched';
+  return;
+}
+
+
+println '    patching StaticLoggerBinder.java';
+content = content.replaceAll( 'SimpleLoggerFactory', 'MavenSimpleLoggerFactory' );
+file.write( content );
+
+
+println '    patching SimpleLogger.java';
+file = new File( dir, 'SimpleLogger.java' );
+content = file.text;
+content = content.replaceAll( 'private static final int LOG_LEVEL_', 'protected static final int LOG_LEVEL_' );
+content = content.replaceAll( 't.printStackTrace(TARGET_STREAM)', 'renderThrowable(t, TARGET_STREAM);' );
+
+index = content.indexOf( 'switch (level) {' );
+end = content.indexOf( '}', index ) + 1;
+content = content.substring( 0, index ) + 'buf.append(renderLevel(level));' + content.substring( end );
+
+content = content.substring( 0, content.lastIndexOf( '}' ) );
+content += '  protected void renderThrowable(Throwable t, PrintStream stream) {}\n';
+content += '  protected String renderLevel(int level) { return ""; }\n}\n';
+
+file.write( content );