You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2013/07/31 00:15:27 UTC
svn commit: r1508665 - in /logging/log4j/log4j2/trunk:
api/src/main/java/org/apache/logging/log4j/status/
core/src/main/java/org/apache/logging/log4j/core/jmx/ src/changes/
Author: rgoers
Date: Tue Jul 30 22:15:27 2013
New Revision: 1508665
URL: http://svn.apache.org/r1508665
Log:
LOG4J2-329 - StatusLogger now only creates StatusData objects if they are the appropriate logging level
Modified:
logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusConsoleListener.java
logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusListener.java
logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/jmx/StatusLoggerAdmin.java
logging/log4j/log4j2/trunk/src/changes/changes.xml
Modified: logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusConsoleListener.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusConsoleListener.java?rev=1508665&r1=1508664&r2=1508665&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusConsoleListener.java (original)
+++ logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusConsoleListener.java Tue Jul 30 22:15:27 2013
@@ -75,12 +75,20 @@ public class StatusConsoleListener imple
}
/**
+ * Return the Log Level for which the Listener should receive events.
+ * @return the Log Level.
+ */
+ public Level getStatusLevel() {
+ return this.level;
+ }
+
+ /**
* Writes status messages to the console.
* @param data The StatusData.
*/
@Override
public void log(final StatusData data) {
- if (data.getLevel().isAtLeastAsSpecificAs(level) && !filtered(data)) {
+ if (!filtered(data)) {
stream.println(data.getFormattedStatus());
}
}
Modified: logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusListener.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusListener.java?rev=1508665&r1=1508664&r2=1508665&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusListener.java (original)
+++ logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusListener.java Tue Jul 30 22:15:27 2013
@@ -16,6 +16,8 @@
*/
package org.apache.logging.log4j.status;
+import org.apache.logging.log4j.Level;
+
/**
* Interface that allows implementers to be notified of events in the logging system.
*/
@@ -26,4 +28,10 @@ public interface StatusListener {
* @param data The StatusData for the event.
*/
void log(StatusData data);
+
+ /**
+ * Return the Log Level that this listener wants included.
+ * @return the Log Level.
+ */
+ Level getStatusLevel();
}
Modified: logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java?rev=1508665&r1=1508664&r2=1508665&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java (original)
+++ logging/log4j/log4j2/trunk/api/src/main/java/org/apache/logging/log4j/status/StatusLogger.java Tue Jul 30 22:15:27 2013
@@ -49,6 +49,8 @@ public final class StatusLogger extends
private static final int MAX_ENTRIES = PROPS.getIntegerProperty(MAX_STATUS_ENTRIES, 200);
+ private static final String DEFAULT_STATUS_LEVEL = PROPS.getStringProperty("log4j2.StatusLogger.level");
+
// private static final String FQCN = AbstractLogger.class.getName();
private static final StatusLogger STATUS_LOGGER = new StatusLogger();
@@ -61,9 +63,12 @@ public final class StatusLogger extends
private final Queue<StatusData> messages = new BoundedQueue<StatusData>(MAX_ENTRIES);
private final ReentrantLock msgLock = new ReentrantLock();
+ private int listenersLevel;
+
private StatusLogger() {
this.logger = new SimpleLogger("StatusLogger", Level.ERROR, false, true, false, false, "", null, PROPS,
System.err);
+ this.listenersLevel = Level.toLevel(DEFAULT_STATUS_LEVEL, Level.WARN).intLevel();
}
/**
@@ -90,6 +95,10 @@ public final class StatusLogger extends
listenersLock.writeLock().lock();
try {
listeners.add(listener);
+ Level lvl = listener.getStatusLevel();
+ if (listenersLevel < lvl.intLevel()) {
+ listenersLevel = lvl.intLevel();
+ }
} finally {
listenersLock.writeLock().unlock();
}
@@ -103,6 +112,14 @@ public final class StatusLogger extends
listenersLock.writeLock().lock();
try {
listeners.remove(listener);
+ int lowest = Level.ERROR.intLevel();
+ for (StatusListener l : listeners) {
+ int level = l.getStatusLevel().intLevel();
+ if (lowest < level) {
+ lowest = level;
+ }
+ }
+ listenersLevel = lowest;
} finally {
listenersLock.writeLock().unlock();
}
@@ -173,7 +190,9 @@ public final class StatusLogger extends
}
if (listeners.size() > 0) {
for (final StatusListener listener : listeners) {
- listener.log(data);
+ if (data.getLevel().isAtLeastAsSpecificAs(listener.getStatusLevel())) {
+ listener.log(data);
+ }
}
} else {
logger.log(marker, fqcn, level, msg, t);
@@ -227,7 +246,7 @@ public final class StatusLogger extends
@Override
public boolean isEnabled(final Level level, final Marker marker) {
if (listeners.size() > 0) {
- return true;
+ return listenersLevel >= level.intLevel();
}
switch (level) {
case FATAL:
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/jmx/StatusLoggerAdmin.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/jmx/StatusLoggerAdmin.java?rev=1508665&r1=1508664&r2=1508665&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/jmx/StatusLoggerAdmin.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/jmx/StatusLoggerAdmin.java Tue Jul 30 22:15:27 2013
@@ -37,11 +37,12 @@ public class StatusLoggerAdmin extends N
private final AtomicLong sequenceNo = new AtomicLong();
private final ObjectName objectName;
+ private Level level = Level.WARN;
/**
* Constructs a new {@code StatusLoggerAdmin} with the {@code Executor} to
* be used for sending {@code Notification}s asynchronously to listeners.
- *
+ *
* @param executor used to send notifications asynchronously
*/
public StatusLoggerAdmin(final Executor executor) {
@@ -79,17 +80,22 @@ public class StatusLoggerAdmin extends N
@Override
public String getLevel() {
- return StatusLogger.getLogger().getLevel().name();
+ return this.level.name();
+ }
+
+ @Override
+ public Level getStatusLevel() {
+ return this.level;
}
@Override
public void setLevel(final String level) {
- StatusLogger.getLogger().setLevel(Level.valueOf(level));
+ this.level = Level.toLevel(level, Level.ERROR);
}
/*
* (non-Javadoc)
- *
+ *
* @see
* org.apache.logging.log4j.status.StatusListener#log(org.apache.logging
* .log4j.status.StatusData)
@@ -108,7 +114,7 @@ public class StatusLoggerAdmin extends N
/**
* Returns the {@code ObjectName} of this mbean.
- *
+ *
* @return the {@code ObjectName}
* @see StatusLoggerAdminMBean#NAME
*/
Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1508665&r1=1508664&r2=1508665&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
+++ logging/log4j/log4j2/trunk/src/changes/changes.xml Tue Jul 30 22:15:27 2013
@@ -21,6 +21,9 @@
</properties>
<body>
<release version="2.0-beta9" date="soon, very soon" description="Bug fixes and enhancements">
+ <action issue="LOG4J2-329" dev="rgoers" type="fix">
+ StatusLogger now only creates StatusData objects if they are the appropriate logging level.
+ </action>
<action issue="LOG4J2-328" dev="rgoers" type="fix">
FlumePersistentManager was calling Berkeley DB's count method too frequently.
</action>