You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2014/09/06 00:42:20 UTC
git commit: Prefer classes over names in LogManager.
Repository: logging-log4j2
Updated Branches:
refs/heads/LOG4J2-809 260b903b0 -> f424c7be4
Prefer classes over names in LogManager.
- Allows for specifying the ClassLoader in getContext().
- Updated to use ReflectionUtil instead of getClassName(int).
- Use Class instead of String methods where possible.
- Refactor commonly repeated calls to LogManager.class.getName() into static field.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/f424c7be
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/f424c7be
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/f424c7be
Branch: refs/heads/LOG4J2-809
Commit: f424c7be4921bcde815398412a60f9a99a7b043e
Parents: 260b903
Author: Matt Sicker <ma...@apache.org>
Authored: Fri Sep 5 17:42:09 2014 -0500
Committer: Matt Sicker <ma...@apache.org>
Committed: Fri Sep 5 17:42:09 2014 -0500
----------------------------------------------------------------------
.../org/apache/logging/log4j/LogManager.java | 85 ++++++++++++--------
1 file changed, 52 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/f424c7be/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
----------------------------------------------------------------------
diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java b/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
index c67299c..0f866b8 100644
--- a/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
+++ b/log4j-api/src/main/java/org/apache/logging/log4j/LogManager.java
@@ -31,6 +31,7 @@ import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.util.LoaderUtil;
import org.apache.logging.log4j.util.PropertiesUtil;
import org.apache.logging.log4j.util.ProviderUtil;
+import org.apache.logging.log4j.util.ReflectionUtil;
import org.apache.logging.log4j.util.Strings;
/**
@@ -59,6 +60,9 @@ public class LogManager {
*/
public static final String ROOT_LOGGER_NAME = Strings.EMPTY;
+ // for convenience
+ private static final String FQCN = LogManager.class.getName();
+
/**
* Scans the classpath to find all logging implementation. Currently, only one will
* be used but this could be extended to allow multiple implementations to be used.
@@ -132,16 +136,6 @@ public class LogManager {
}
/**
- * Gets the class name of the caller in the current stack at the given {@code depth}.
- *
- * @param depth a 0-based index in the current stack.
- * @return a class name
- */
- private static String getClassName(final int depth) {
- return new Throwable().getStackTrace()[depth].getClassName();
- }
-
- /**
* Returns the current LoggerContext.
* <p>
* WARNING - The LoggerContext returned by this method may not be the LoggerContext used to create a Logger
@@ -150,7 +144,7 @@ public class LogManager {
* @return The current LoggerContext.
*/
public static LoggerContext getContext() {
- return factory.getContext(LogManager.class.getName(), null, null, true);
+ return factory.getContext(FQCN, null, null, true);
}
/**
@@ -163,7 +157,8 @@ public class LogManager {
* @return a LoggerContext.
*/
public static LoggerContext getContext(final boolean currentContext) {
- return factory.getContext(LogManager.class.getName(), null, null, currentContext, null, null);
+ // TODO: would it be a terrible idea to try and find the caller ClassLoader here?
+ return factory.getContext(FQCN, null, null, currentContext, null, null);
}
/**
@@ -178,7 +173,7 @@ public class LogManager {
* @return a LoggerContext.
*/
public static LoggerContext getContext(final ClassLoader loader, final boolean currentContext) {
- return factory.getContext(LogManager.class.getName(), loader, null, currentContext);
+ return factory.getContext(FQCN, loader, null, currentContext);
}
/**
@@ -195,7 +190,7 @@ public class LogManager {
*/
public static LoggerContext getContext(final ClassLoader loader, final boolean currentContext,
final Object externalContext) {
- return factory.getContext(LogManager.class.getName(), loader, externalContext, currentContext);
+ return factory.getContext(FQCN, loader, externalContext, currentContext);
}
/**
@@ -212,7 +207,7 @@ public class LogManager {
*/
public static LoggerContext getContext(final ClassLoader loader, final boolean currentContext,
final URI configLocation) {
- return factory.getContext(LogManager.class.getName(), loader, null, currentContext, configLocation, null);
+ return factory.getContext(FQCN, loader, null, currentContext, configLocation, null);
}
@@ -231,8 +226,7 @@ public class LogManager {
*/
public static LoggerContext getContext(final ClassLoader loader, final boolean currentContext,
final Object externalContext, final URI configLocation) {
- return factory.getContext(LogManager.class.getName(), loader, externalContext, currentContext, configLocation,
- null);
+ return factory.getContext(FQCN, loader, externalContext, currentContext, configLocation, null);
}
@@ -253,8 +247,7 @@ public class LogManager {
public static LoggerContext getContext(final ClassLoader loader, final boolean currentContext,
final Object externalContext, final URI configLocation,
final String name) {
- return factory.getContext(LogManager.class.getName(), loader, externalContext, currentContext, configLocation,
- name);
+ return factory.getContext(FQCN, loader, externalContext, currentContext, configLocation, name);
}
/**
@@ -324,6 +317,7 @@ public class LogManager {
* @param clazz
* The Class whose name should be used as the Logger name.
* @return The Logger, created with a {@link StringFormatterMessageFactory}
+ * @throws UnsupportedOperationException if {@code clazz} is {@code null} and the calling class cannot be determined.
* @see Logger#fatal(Marker, String, Object...)
* @see Logger#fatal(String, Object...)
* @see Logger#error(Marker, String, Object...)
@@ -339,7 +333,8 @@ public class LogManager {
* @see StringFormatterMessageFactory
*/
public static Logger getFormatterLogger(final Class<?> clazz) {
- return getLogger(clazz != null ? clazz.getName() : getClassName(2), StringFormatterMessageFactory.INSTANCE);
+ return getLogger(clazz != null ? clazz : ReflectionUtil.getCallerClass(2),
+ StringFormatterMessageFactory.INSTANCE);
}
/**
@@ -354,6 +349,7 @@ public class LogManager {
* @param value
* The value's whose class name should be used as the Logger name.
* @return The Logger, created with a {@link StringFormatterMessageFactory}
+ * @throws UnsupportedOperationException if {@code value} is {@code null} and the calling class cannot be determined.
* @see Logger#fatal(Marker, String, Object...)
* @see Logger#fatal(String, Object...)
* @see Logger#error(Marker, String, Object...)
@@ -369,8 +365,8 @@ public class LogManager {
* @see StringFormatterMessageFactory
*/
public static Logger getFormatterLogger(final Object value) {
- return getLogger(value != null ? value.getClass().getName() : getClassName(2),
- StringFormatterMessageFactory.INSTANCE);
+ return getLogger(value != null ? value.getClass() : ReflectionUtil.getCallerClass(2),
+ StringFormatterMessageFactory.INSTANCE);
}
/**
@@ -384,6 +380,7 @@ public class LogManager {
*
* @param name The logger name. If null it will default to the name of the calling class.
* @return The Logger, created with a {@link StringFormatterMessageFactory}
+ * @throws UnsupportedOperationException if {@code name} is {@code null} and the calling class cannot be determined.
* @see Logger#fatal(Marker, String, Object...)
* @see Logger#fatal(String, Object...)
* @see Logger#error(Marker, String, Object...)
@@ -399,15 +396,17 @@ public class LogManager {
* @see StringFormatterMessageFactory
*/
public static Logger getFormatterLogger(final String name) {
- return getLogger(name != null ? name : getClassName(2), StringFormatterMessageFactory.INSTANCE);
+ return name == null ? getFormatterLogger(ReflectionUtil.getCallerClass(2)) : getLogger(name,
+ StringFormatterMessageFactory.INSTANCE);
}
/**
* Returns a Logger with the name of the calling class.
* @return The Logger for the calling class.
+ * @throws UnsupportedOperationException if the calling class cannot be determined.
*/
public static Logger getLogger() {
- return getLogger(getClassName(2));
+ return getLogger(ReflectionUtil.getCallerClass(2));
}
/**
@@ -415,9 +414,17 @@ public class LogManager {
* @param clazz The Class whose name should be used as the Logger name. If null it will default to the calling
* class.
* @return The Logger.
+ * @throws UnsupportedOperationException if {@code clazz} is {@code null} and the calling class cannot be determined.
*/
public static Logger getLogger(final Class<?> clazz) {
- return getLogger(clazz != null ? clazz.getName() : getClassName(2));
+ if (clazz == null) {
+ final Class<?> candidate = ReflectionUtil.getCallerClass(2);
+ if (candidate == null) {
+ throw new UnsupportedOperationException("No class provided, and an appropriate one cannot be found.");
+ }
+ return getLogger(candidate);
+ }
+ return getContext(clazz.getClassLoader(), false).getLogger(clazz.getName());
}
/**
@@ -427,9 +434,17 @@ public class LogManager {
* @param messageFactory The message factory is used only when creating a logger, subsequent use does not change
* the logger but will log a warning if mismatched.
* @return The Logger.
+ * @throws UnsupportedOperationException if {@code clazz} is {@code null} and the calling class cannot be determined.
*/
public static Logger getLogger(final Class<?> clazz, final MessageFactory messageFactory) {
- return getLogger(clazz != null ? clazz.getName() : getClassName(2), messageFactory);
+ if (clazz == null) {
+ final Class<?> candidate = ReflectionUtil.getCallerClass(2);
+ if (candidate == null) {
+ throw new UnsupportedOperationException("No class provided, and an appropriate one cannot be found.");
+ }
+ return getLogger(candidate, messageFactory);
+ }
+ return getContext(clazz.getClassLoader(), false).getLogger(clazz.getName(), messageFactory);
}
/**
@@ -437,9 +452,10 @@ public class LogManager {
* @param messageFactory The message factory is used only when creating a logger, subsequent use does not change
* the logger but will log a warning if mismatched.
* @return The Logger for the calling class.
+ * @throws UnsupportedOperationException if the calling class cannot be determined.
*/
public static Logger getLogger(final MessageFactory messageFactory) {
- return getLogger(getClassName(2), messageFactory);
+ return getLogger(ReflectionUtil.getCallerClass(2), messageFactory);
}
/**
@@ -447,9 +463,10 @@ public class LogManager {
* @param value The value whose class name should be used as the Logger name. If null the name of the calling
* class will be used as the logger name.
* @return The Logger.
+ * @throws UnsupportedOperationException if {@code value} is {@code null} and the calling class cannot be determined.
*/
public static Logger getLogger(final Object value) {
- return getLogger(value != null ? value.getClass().getName() : getClassName(2));
+ return getLogger(value != null ? value.getClass() : ReflectionUtil.getCallerClass(2));
}
/**
@@ -459,9 +476,10 @@ public class LogManager {
* @param messageFactory The message factory is used only when creating a logger, subsequent use does not change
* the logger but will log a warning if mismatched.
* @return The Logger.
+ * @throws UnsupportedOperationException if {@code value} is {@code null} and the calling class cannot be determined.
*/
public static Logger getLogger(final Object value, final MessageFactory messageFactory) {
- return getLogger(value != null ? value.getClass().getName() : getClassName(2), messageFactory);
+ return getLogger(value != null ? value.getClass() : ReflectionUtil.getCallerClass(2), messageFactory);
}
/**
@@ -469,10 +487,10 @@ public class LogManager {
*
* @param name The logger name. If null the name of the calling class will be used.
* @return The Logger.
+ * @throws UnsupportedOperationException if {@code name} is {@code null} and the calling class cannot be determined.
*/
public static Logger getLogger(final String name) {
- final String actualName = name != null ? name : getClassName(2);
- return factory.getContext(LogManager.class.getName(), null, null, false).getLogger(actualName);
+ return name != null ? getContext(false).getLogger(name) : getLogger(ReflectionUtil.getCallerClass(2));
}
/**
@@ -482,10 +500,11 @@ public class LogManager {
* @param messageFactory The message factory is used only when creating a logger, subsequent use does not change
* the logger but will log a warning if mismatched.
* @return The Logger.
+ * @throws UnsupportedOperationException if {@code name} is {@code null} and the calling class cannot be determined.
*/
public static Logger getLogger(final String name, final MessageFactory messageFactory) {
- final String actualName = name != null ? name : getClassName(2);
- return factory.getContext(LogManager.class.getName(), null, null, false).getLogger(actualName, messageFactory);
+ return name != null ? getContext(false).getLogger(name, messageFactory) : getLogger(
+ ReflectionUtil.getCallerClass(2), messageFactory);
}
/**