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ülcü
- * @author <a href="mailto:sanders@apache.org">Scott Sanders</a>
- * @author Rod Waldhoff
- * @author Robert Burrell Donkin
- * @author Cé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ülcü
- */
-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ülcü
- */
-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ülcü
- */
-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ülcü
- */
-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 );