Return-Path:
X-Original-To: apmail-logging-commits-archive@minotaur.apache.org
Delivered-To: apmail-logging-commits-archive@minotaur.apache.org
Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
by minotaur.apache.org (Postfix) with SMTP id 2D769CA93
for ;
Sun, 13 May 2012 05:43:06 +0000 (UTC)
Received: (qmail 84030 invoked by uid 500); 13 May 2012 05:43:05 -0000
Delivered-To: apmail-logging-commits-archive@logging.apache.org
Received: (qmail 83963 invoked by uid 500); 13 May 2012 05:43:03 -0000
Mailing-List: contact commits-help@logging.apache.org; run by ezmlm
Precedence: bulk
List-Help:
List-Unsubscribe:
List-Post:
List-Id:
Reply-To: dev@logging.apache.org
Delivered-To: mailing list commits@logging.apache.org
Received: (qmail 83923 invoked by uid 99); 13 May 2012 05:43:02 -0000
Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230)
by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 13 May 2012 05:43:02 +0000
X-ASF-Spam-Status: No, hits=-2000.0 required=5.0
tests=ALL_TRUSTED
X-Spam-Check-By: apache.org
Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4)
by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 13 May 2012 05:42:51 +0000
Received: from eris.apache.org (localhost [127.0.0.1])
by eris.apache.org (Postfix) with ESMTP id 7644B23889B3;
Sun, 13 May 2012 05:42:29 +0000 (UTC)
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: svn commit: r1337783 - in /logging/log4j/log4j2/trunk:
core/src/main/java/org/apache/logging/log4j/core/appender/
core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/
core/src/main/java/org/apache/logging/log4j/core/appender/routing/ core...
Date: Sun, 13 May 2012 05:42:28 -0000
To: commits@logging.apache.org
From: rgoers@apache.org
X-Mailer: svnmailer-1.0.8-patched
Message-Id: <20120513054229.7644B23889B3@eris.apache.org>
Author: rgoers
Date: Sun May 13 05:42:27 2012
New Revision: 1337783
URL: http://svn.apache.org/viewvc?rev=1337783&view=rev
Log:
Add filtering on appender-refs.
Added:
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java
logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelTest.java
- copied, changed from r1332056, logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/LoggerTest.java
logging/log4j/log4j2/trunk/core/src/test/resources/log4j-reference-level.xml
- copied, changed from r1332056, logging/log4j/log4j2/trunk/core/src/test/resources/log4j-test1.xml
Removed:
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/AppenderRefPlugin.java
Modified:
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/FailoversPlugin.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/routing/Route.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfiguration.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/BurstFilter.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/MarkerFilter.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/StructuredDataFilter.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilter.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/ThresholdFilter.java
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java
logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing.json
logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing.xml
logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing2.json
logging/log4j/log4j2/trunk/src/site/xdoc/manual/architecture.xml
logging/log4j/log4j2/trunk/src/site/xdoc/manual/configuration.xml
logging/log4j/log4j2/trunk/src/site/xdoc/manual/filters.xml
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/FailoverAppender.java Sun May 13 05:42:27 2012
@@ -21,6 +21,7 @@ import org.apache.logging.log4j.core.App
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.AppenderControl;
+import org.apache.logging.log4j.core.config.AppenderRef;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttr;
@@ -64,14 +65,14 @@ public final class FailoverAppender exte
Map map = config.getAppenders();
int errors = 0;
if (map.containsKey(primaryRef)) {
- primary = new AppenderControl(map.get(primaryRef));
+ primary = new AppenderControl(map.get(primaryRef), null, null);
} else {
LOGGER.error("Unable to locate primary Appender " + primaryRef);
++errors;
}
for (String name : failovers) {
if (map.containsKey(name)) {
- failoverAppenders.add(new AppenderControl(map.get(name)));
+ failoverAppenders.add(new AppenderControl(map.get(name), null, null));
} else {
LOGGER.error("Failover appender " + name + " is not configured");
}
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/FailoversPlugin.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/FailoversPlugin.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/FailoversPlugin.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/FailoversPlugin.java Sun May 13 05:42:27 2012
@@ -17,6 +17,7 @@
package org.apache.logging.log4j.core.appender;
import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.config.AppenderRef;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginElement;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
@@ -42,11 +43,15 @@ public final class FailoversPlugin {
* @return The appender references.
*/
@PluginFactory
- public static String[] createFailovers(@PluginElement("appender-ref") String[] refs) {
+ public static String[] createFailovers(@PluginElement("appender-ref") AppenderRef[] refs) {
if (refs == null) {
- logger.error("failovers must contain an appender-refernce");
+ logger.error("failovers must contain an appender-reference");
}
- return refs;
+ String[] arr = new String[refs.length];
+ for (int i=0; i < refs.length; ++i) {
+ arr[i] = refs[i].getRef();
+ }
+ return arr;
}
}
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/rewrite/RewriteAppender.java Sun May 13 05:42:27 2012
@@ -16,11 +16,14 @@
*/
package org.apache.logging.log4j.core.appender.rewrite;
+import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Filter;
+import org.apache.logging.log4j.core.Lifecycle;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.AppenderBase;
import org.apache.logging.log4j.core.config.AppenderControl;
+import org.apache.logging.log4j.core.config.AppenderRef;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttr;
@@ -40,9 +43,9 @@ public final class RewriteAppender exten
private final Configuration config;
private ConcurrentMap appenders = new ConcurrentHashMap();
private final RewritePolicy rewritePolicy;
- private final String[] appenderRefs;
+ private final AppenderRef[] appenderRefs;
- private RewriteAppender(String name, Filter filter, boolean handleException, String[] appenderRefs,
+ private RewriteAppender(String name, Filter filter, boolean handleException, AppenderRef[] appenderRefs,
RewritePolicy rewritePolicy, Configuration config) {
super(name, filter, null, handleException);
this.config = config;
@@ -53,10 +56,11 @@ public final class RewriteAppender exten
@Override
public void start() {
Map map = config.getAppenders();
- for (String ref : appenderRefs) {
- Appender appender = map.get(ref);
+ for (AppenderRef ref : appenderRefs) {
+ String name = ref.getRef();
+ Appender appender = map.get(name);
if (appender != null) {
- appenders.put(ref, new AppenderControl(appender));
+ appenders.put(name, new AppenderControl(appender, ref.getLevel(), null));
} else {
LOGGER.error("Appender " + ref + " cannot be located. Reference ignored");
}
@@ -68,9 +72,7 @@ public final class RewriteAppender exten
public void stop() {
super.stop();
for (AppenderControl control : appenders.values()) {
- if (control instanceof AppenderWrapper) {
- control.getAppender().stop();
- }
+ control.getAppender().stop();
}
}
@@ -100,7 +102,7 @@ public final class RewriteAppender exten
@PluginFactory
public static RewriteAppender createAppender(@PluginAttr("name") String name,
@PluginAttr("suppressExceptions") String suppress,
- @PluginElement("appender-ref") String[] appenderRefs,
+ @PluginElement("appender-ref") AppenderRef[] appenderRefs,
@PluginConfiguration Configuration config,
@PluginElement("rewritePolicy") RewritePolicy rewritePolicy,
@PluginElement("filter") Filter filter) {
@@ -117,17 +119,4 @@ public final class RewriteAppender exten
}
return new RewriteAppender(name, filter, handleExceptions, appenderRefs, rewritePolicy, config);
}
-
- /**
- * Wrap the AppenderControl simply so it can be used here.
- */
- private static class AppenderWrapper extends AppenderControl {
- /**
- * Constructor.
- * @param appender The Appender to wrap.
- */
- public AppenderWrapper(Appender appender) {
- super(appender);
- }
- }
}
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/routing/Route.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/routing/Route.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/routing/Route.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/routing/Route.java Sun May 13 05:42:27 2012
@@ -91,7 +91,7 @@ public final class Route {
* @return A Route.
*/
@PluginFactory
- public static Route createRoute(@PluginAttr("appender-ref") String appenderRef,
+ public static Route createRoute(@PluginAttr("ref") String appenderRef,
@PluginAttr("key") String key,
@PluginNode Node node) {
if (node != null && node.hasChildren()) {
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/appender/routing/RoutingAppender.java Sun May 13 05:42:27 2012
@@ -16,6 +16,7 @@
*/
package org.apache.logging.log4j.core.appender.routing;
+import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LogEvent;
@@ -73,7 +74,7 @@ public final class RoutingAppender exten
LOGGER.error("Duplicate route " + key + " is ignored");
}
} else {
- appenders.put(key, new AppenderControl(appender));
+ appenders.put(key, new AppenderControl(appender, null, null));
}
} else {
LOGGER.error("Appender " + route.getAppenderRef() + " cannot be located. Route ignored");
@@ -87,9 +88,7 @@ public final class RoutingAppender exten
public void stop() {
super.stop();
for (AppenderControl control : appenders.values()) {
- if (control instanceof AppenderWrapper) {
- control.getAppender().stop();
- }
+ control.getAppender().stop();
}
}
@@ -135,7 +134,7 @@ public final class RoutingAppender exten
if (app == null) {
return null;
}
- control = new AppenderWrapper(app);
+ control = new AppenderControl(app, null, null);
appenders.put(key, control);
if (defaultRoute) {
appenders.put(DEFAULT_KEY, control);
@@ -194,13 +193,4 @@ public final class RoutingAppender exten
}
return new RoutingAppender(name, filter, handleExceptions, routes, rewritePolicy, config);
}
-
- /**
- * Wrapper to allow AppenderControl to be used here.
- */
- private static class AppenderWrapper extends AppenderControl {
- public AppenderWrapper(Appender appender) {
- super(appender);
- }
- }
}
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java Sun May 13 05:42:27 2012
@@ -16,27 +16,37 @@
*/
package org.apache.logging.log4j.core.config;
+import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.Lifecycle;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.appender.AppenderRuntimeException;
+import org.apache.logging.log4j.core.filter.Filterable;
import org.apache.logging.log4j.core.filter.Filtering;
/**
* Wraps appenders with details the appender implementation shouldn't need to know about.
*/
-public class AppenderControl {
+public class AppenderControl extends Filterable {
private ThreadLocal recursive = new ThreadLocal();
private final Appender appender;
+ private final Level level;
+ private final int intLevel;
+
/**
* Constructor.
* @param appender The target Appender.
*/
- public AppenderControl(Appender appender) {
+ public AppenderControl(Appender appender, Level level, Filter filter) {
+ super(filter);
this.appender = appender;
+ this.level = level;
+ this.intLevel = level == null ? Level.ALL.intLevel() : level.intLevel();
+ startFilter();
}
/**
@@ -52,6 +62,17 @@ public class AppenderControl {
* @param event The event to process.
*/
public void callAppender(LogEvent event) {
+ if (getFilter() != null) {
+ Filter.Result r = getFilter().filter(event);
+ if (r == Filter.Result.DENY) {
+ return;
+ }
+ }
+ if (level != null) {
+ if (intLevel < event.getLevel().intLevel()) {
+ return;
+ }
+ }
if (recursive.get() != null) {
appender.getHandler().error("Recursive call to appender " + appender.getName());
return;
Added: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java?rev=1337783&view=auto
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java (added)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/AppenderRef.java Sun May 13 05:42:27 2012
@@ -0,0 +1,82 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j.core.config;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Filter;
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginAttr;
+import org.apache.logging.log4j.core.config.plugins.PluginElement;
+import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.status.StatusLogger;
+
+/**
+ * An Appender reference.
+ */
+@Plugin(name = "appender-ref", type = "Core", printObject = true)
+public class AppenderRef {
+ private static final Logger LOGGER = StatusLogger.getLogger();
+
+ private final String ref;
+ private final Level level;
+ private final Filter filter;
+
+ private AppenderRef(String ref, Level level, Filter filter) {
+ this.ref = ref;
+ this.level = level;
+ this.filter = filter;
+ }
+
+ public String getRef() {
+ return ref;
+ }
+
+ public Level getLevel() {
+ return level;
+ }
+
+ public Filter getFilter() {
+ return filter;
+ }
+
+ /**
+ * Create an Appender reference.
+ * @param ref The name of the Appender.
+ * @return The name of the Appender.
+ */
+ @PluginFactory
+ public static AppenderRef createAppenderRef(@PluginAttr("ref") String ref,
+ @PluginAttr("level") String level,
+ @PluginElement("filters") Filter filter) {
+
+ if (ref == null) {
+ LOGGER.error("Appender references must contain a reference");
+ return null;
+ }
+ Level l = null;
+
+ if (level != null) {
+ l = Level.toLevel(level.toUpperCase(), null);
+ if (l == null) {
+ LOGGER.error("Invalid level " + level + " on Appender reference " + ref);
+ }
+ }
+
+ return new AppenderRef(ref, l, filter);
+ }
+}
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/BaseConfiguration.java Sun May 13 05:42:27 2012
@@ -16,6 +16,7 @@
*/
package org.apache.logging.log4j.core.config;
+import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Filter;
@@ -188,12 +189,12 @@ public class BaseConfiguration extends F
for (Map.Entry entry : loggers.entrySet()) {
LoggerConfig l = entry.getValue();
l.setConfigurationMonitor(monitor);
- for (String ref : l.getAppenderRefs()) {
- Appender app = appenders.get(ref);
+ for (AppenderRef ref : l.getAppenderRefs()) {
+ Appender app = appenders.get(ref.getRef());
if (app != null) {
- l.addAppender(app);
+ l.addAppender(app, ref.getLevel(), ref.getFilter());
} else {
- LOGGER.error("Unable to locate appender " + ref + " for logger " + l.getName());
+ LOGGER.error("Unable to locate appender " + ref.getRef() + " for logger " + l.getName());
}
}
@@ -281,11 +282,11 @@ public class BaseConfiguration extends F
appenders.putIfAbsent(name, appender);
LoggerConfig lc = getLoggerConfig(name);
if (lc.getName().equals(name)) {
- lc.addAppender(appender);
+ lc.addAppender(appender, null, null);
} else {
LoggerConfig nlc = new LoggerConfig(name, lc.getLevel(), lc.isAdditive());
nlc.setConfigurationMonitor(monitor);
- nlc.addAppender(appender);
+ nlc.addAppender(appender, null, null);
nlc.setParent(lc);
loggers.putIfAbsent(name, nlc);
setParents();
@@ -599,6 +600,12 @@ public class BaseConfiguration extends F
if (parms[index] != null) {
break;
}
+ if (list.size() > 0 && !parmClass.isAssignableFrom(list.get(0).getClass())) {
+ LOGGER.error("Attempted to assign List containing class " +
+ list.get(0).getClass().getName() + " to array of type " + parmClass +
+ " for attribute " + name);
+ break;
+ }
Object[] array = (Object[]) Array.newInstance(parmClass, list.size());
int i = 0;
for (Object obj : list) {
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfiguration.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfiguration.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfiguration.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/DefaultConfiguration.java Sun May 13 05:42:27 2012
@@ -50,7 +50,7 @@ public class DefaultConfiguration extend
Appender appender = ConsoleAppender.createAppender(layout, null, "SYSTEM_OUT", "Console", "true");
addAppender(appender);
LoggerConfig root = getRootLogger();
- root.addAppender(appender);
+ root.addAppender(appender, null, null);
String l = System.getProperty(DEFAULT_LEVEL);
Level level = (l != null && Level.valueOf(l) != null) ? Level.valueOf(l) : Level.ERROR;
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java Sun May 13 05:42:27 2012
@@ -22,6 +22,7 @@ import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.Filter;
+import org.apache.logging.log4j.core.Lifecycle;
import org.apache.logging.log4j.core.filter.Filterable;
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
import org.apache.logging.log4j.core.LogEvent;
@@ -35,10 +36,16 @@ import org.apache.logging.log4j.message.
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CyclicBarrier;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.atomic.AtomicInteger;
/**
* Logger object that is created via configuration.
@@ -48,7 +55,7 @@ public class LoggerConfig extends Filter
private static final Logger LOGGER = StatusLogger.getLogger();
- private List appenderRefs = new ArrayList();
+ private List appenderRefs = new ArrayList();
private Map appenders = new ConcurrentHashMap();
private final String name;
private LogEventFactory logEventFactory;
@@ -56,6 +63,10 @@ public class LoggerConfig extends Filter
private boolean additive = true;
private LoggerConfig parent;
private ConfigurationMonitor monitor = new DefaultConfigurationMonitor();
+ private AtomicInteger counter = new AtomicInteger();
+ private boolean shutdown = false;
+ private static final int MAX_RETRIES = 3;
+ private static final long WAIT_TIME = 1000;
/**
* Default constructor.
@@ -79,7 +90,7 @@ public class LoggerConfig extends Filter
this.additive = additive;
}
- protected LoggerConfig(String name, List appenders, Filter filter, Level level,
+ protected LoggerConfig(String name, List appenders, Filter filter, Level level,
boolean additive) {
super(filter);
this.logEventFactory = this;
@@ -131,8 +142,8 @@ public class LoggerConfig extends Filter
* Add an Appender to the LoggerConfig.
* @param appender The Appender to add.
*/
- public void addAppender(Appender appender) {
- appenders.put(appender.getName(), new AppenderControl(appender));
+ public void addAppender(Appender appender, Level level, Filter filter) {
+ appenders.put(appender.getName(), new AppenderControl(appender, level, filter));
}
/**
@@ -140,7 +151,10 @@ public class LoggerConfig extends Filter
* @param name The name of the Appender.
*/
public void removeAppender(String name) {
- appenders.remove(name);
+ AppenderControl ctl = appenders.remove(name);
+ if (ctl != null) {
+ cleanupFilter(ctl);
+ }
}
/**
@@ -159,14 +173,31 @@ public class LoggerConfig extends Filter
* Remove all Appenders.
*/
protected void clearAppenders() {
- appenders.clear();
+ waitForCompletion();
+ Collection controls = appenders.values();
+ Iterator iterator = controls.iterator();
+ while (iterator.hasNext()) {
+ AppenderControl ctl = iterator.next();
+ iterator.remove();
+ cleanupFilter(ctl);
+ }
+ }
+
+ private void cleanupFilter(AppenderControl ctl) {
+ Filter filter = ctl.getFilter();
+ if (filter != null) {
+ ctl.removeFilter(filter);
+ if (filter instanceof Lifecycle) {
+ ((Lifecycle) filter).stop();
+ }
+ }
}
/**
* Return the Appender references.
* @return a List of all the Appender names attached to this LoggerConfig.
*/
- public List getAppenderRefs() {
+ public List getAppenderRefs() {
return appenderRefs;
}
@@ -233,19 +264,52 @@ public class LoggerConfig extends Filter
}
/**
+ * Wait for all log events to complete before shutting down this loggerConfig.
+ */
+ private synchronized void waitForCompletion() {
+ if (shutdown) {
+ return;
+ }
+ shutdown = true;
+ int retries = 0;
+ while (counter.get() > 0) {
+ try {
+ wait(WAIT_TIME * (retries + 1));
+ } catch (InterruptedException ie) {
+ if (++retries > MAX_RETRIES) {
+ break;
+ }
+ }
+ }
+ }
+
+ /**
* Logs an event.
* @param event Yhe log event.
*/
public void log(LogEvent event) {
- monitor.checkConfiguration();
- if (isFiltered(event)) {
- return;
- }
- callAppenders(event);
+ counter.incrementAndGet();
+ try {
+ monitor.checkConfiguration();
+ if (isFiltered(event)) {
+ return;
+ }
+
+ callAppenders(event);
+
+ if (additive && parent != null) {
+ parent.log(event);
+ }
+ } finally {
+ if (counter.decrementAndGet() == 0) {
+ synchronized(this) {
+ if (shutdown) {
+ notifyAll();
+ }
+ }
- if (additive && parent != null) {
- parent.log(event);
+ }
}
}
@@ -288,14 +352,14 @@ public class LoggerConfig extends Filter
public static LoggerConfig createLogger(@PluginAttr("additivity") String additivity,
@PluginAttr("level") String loggerLevel,
@PluginAttr("name") String loggerName,
- @PluginElement("appender-ref") String[] refs,
+ @PluginElement("appender-ref") AppenderRef[] refs,
@PluginElement("filters") Filter filter) {
if (loggerName == null) {
LOGGER.error("Loggers cannot be configured without a name");
return null;
}
- List appenderRefs = Arrays.asList(refs);
+ List appenderRefs = Arrays.asList(refs);
Level level = loggerLevel == null ? Level.ERROR : Level.valueOf(loggerLevel.toUpperCase());
String name = loggerName.equals("root") ? "" : loggerName;
boolean additive = additivity == null ? true : Boolean.parseBoolean(additivity);
@@ -312,9 +376,9 @@ public class LoggerConfig extends Filter
@PluginFactory
public static LoggerConfig createLogger(@PluginAttr("additivity") String additivity,
@PluginAttr("level") String loggerLevel,
- @PluginElement("appender-ref") String[] refs,
+ @PluginElement("appender-ref") AppenderRef[] refs,
@PluginElement("filters") Filter filter) {
- List appenderRefs = Arrays.asList(refs);
+ List appenderRefs = Arrays.asList(refs);
Level level = loggerLevel == null ? Level.ERROR : Level.valueOf(loggerLevel.toUpperCase());
boolean additive = additivity == null ? true : Boolean.parseBoolean(additivity);
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/BurstFilter.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/BurstFilter.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/BurstFilter.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/BurstFilter.java Sun May 13 05:42:27 2012
@@ -219,8 +219,8 @@ public final class BurstFilter extends F
@PluginAttr("maxBurst") String maxBurst,
@PluginAttr("onmatch") String match,
@PluginAttr("onmismatch") String mismatch) {
- Result onMatch = match == null ? null : Result.valueOf(match);
- Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch);
+ Result onMatch = match == null ? null : Result.valueOf(match.toUpperCase());
+ Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch.toUpperCase());
Level lvl = Level.toLevel(level, Level.WARN);
float eventRate = rate == null ? DEFAULT_RATE : Float.parseFloat(rate);
if (eventRate <= 0) {
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java Sun May 13 05:42:27 2012
@@ -119,8 +119,8 @@ public final class DynamicThresholdFilte
@PluginAttr("defaultThreshold") String level,
@PluginAttr("onmatch") String match,
@PluginAttr("onmismatch") String mismatch) {
- Result onMatch = match == null ? null : Result.valueOf(match);
- Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch);
+ Result onMatch = match == null ? null : Result.valueOf(match.toUpperCase());
+ Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch.toUpperCase());
Map map = new HashMap();
for (ValueLevelPair pair : pairs) {
map.put(pair.getKey(), pair.getLevel());
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/MapFilter.java Sun May 13 05:42:27 2012
@@ -131,8 +131,8 @@ public class MapFilter extends FilterBas
return null;
}
boolean isAnd = oper == null || !oper.equalsIgnoreCase("or");
- Result onMatch = match == null ? null : Result.valueOf(match);
- Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch);
+ Result onMatch = match == null ? null : Result.valueOf(match.toUpperCase());
+ Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch.toUpperCase());
return new MapFilter(map, isAnd, onMatch, onMismatch);
}
}
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/MarkerFilter.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/MarkerFilter.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/MarkerFilter.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/MarkerFilter.java Sun May 13 05:42:27 2012
@@ -84,8 +84,8 @@ public final class MarkerFilter extends
return null;
}
Marker m = MarkerManager.getMarker(marker);
- Result onMatch = match == null ? null : Result.valueOf(match);
- Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch);
+ Result onMatch = match == null ? null : Result.valueOf(match.toUpperCase());
+ Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch.toUpperCase());
return new MarkerFilter(m, onMatch, onMismatch);
}
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/RegexFilter.java Sun May 13 05:42:27 2012
@@ -109,8 +109,8 @@ public final class RegexFilter extends F
LOGGER.error("RegexFilter caught exception compiling pattern: " + regex + " cause: " + ex.getMessage());
return null;
}
- Result onMatch = match == null ? null : Result.valueOf(match);
- Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch);
+ Result onMatch = match == null ? null : Result.valueOf(match.toUpperCase());
+ Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch.toUpperCase());
return new RegexFilter(raw, pattern, onMatch, onMismatch);
}
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/StructuredDataFilter.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/StructuredDataFilter.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/StructuredDataFilter.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/StructuredDataFilter.java Sun May 13 05:42:27 2012
@@ -140,8 +140,8 @@ public final class StructuredDataFilter
return null;
}
boolean isAnd = oper == null || !oper.equalsIgnoreCase("or");
- Result onMatch = match == null ? null : Result.valueOf(match);
- Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch);
+ Result onMatch = match == null ? null : Result.valueOf(match.toUpperCase());
+ Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch.toUpperCase());
return new StructuredDataFilter(map, isAnd, onMatch, onMismatch);
}
}
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilter.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilter.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilter.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/ThreadContextMapFilter.java Sun May 13 05:42:27 2012
@@ -158,8 +158,8 @@ public class ThreadContextMapFilter exte
return null;
}
boolean isAnd = oper == null || !oper.equalsIgnoreCase("or");
- Result onMatch = match == null ? null : Result.valueOf(match);
- Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch);
+ Result onMatch = match == null ? null : Result.valueOf(match.toUpperCase());
+ Result onMismatch = mismatch == null ? null : Result.valueOf(mismatch.toUpperCase());
return new ThreadContextMapFilter(map, isAnd, onMatch, onMismatch);
}
}
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/ThresholdFilter.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/ThresholdFilter.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/ThresholdFilter.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/ThresholdFilter.java Sun May 13 05:42:27 2012
@@ -81,8 +81,8 @@ public final class ThresholdFilter exten
@PluginAttr("onMatch") String match,
@PluginAttr("onMismatch") String mismatch) {
Level level = loggerLevel == null ? Level.ERROR : Level.toLevel(loggerLevel.toUpperCase());
- Result onMatch = match == null ? Result.NEUTRAL : Result.valueOf(match);
- Result onMismatch = mismatch == null ? Result.DENY : Result.valueOf(mismatch);
+ Result onMatch = match == null ? Result.NEUTRAL : Result.valueOf(match.toUpperCase());
+ Result onMismatch = mismatch == null ? Result.DENY : Result.valueOf(mismatch.toUpperCase());
return new ThresholdFilter(level, onMatch, onMismatch);
}
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/filter/TimeFilter.java Sun May 13 05:42:27 2012
@@ -126,8 +126,8 @@ public final class TimeFilter extends Fi
}
}
TimeZone timezone = (tz == null) ? TimeZone.getDefault() : TimeZone.getTimeZone(tz);
- Result onMatch = match == null ? Result.NEUTRAL : Result.valueOf(match);
- Result onMismatch = mismatch == null ? Result.DENY : Result.valueOf(mismatch);
+ Result onMatch = match == null ? Result.NEUTRAL : Result.valueOf(match.toUpperCase());
+ Result onMismatch = mismatch == null ? Result.DENY : Result.valueOf(mismatch.toUpperCase());
return new TimeFilter(s, e, timezone, onMatch, onMismatch);
}
Copied: logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelTest.java (from r1332056, logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/LoggerTest.java)
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelTest.java?p2=logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelTest.java&p1=logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/LoggerTest.java&r1=1332056&r2=1337783&rev=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/LoggerTest.java (original)
+++ logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/AppenderRefLevelTest.java Sun May 13 05:42:27 2012
@@ -17,14 +17,16 @@
package org.apache.logging.log4j.core;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Marker;
import org.apache.logging.log4j.MarkerManager;
import org.apache.logging.log4j.ThreadContext;
-import org.apache.logging.log4j.test.appender.ListAppender;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.XMLConfigurationFactory;
-import org.apache.logging.log4j.status.StatusLogger;
import org.apache.logging.log4j.message.StructuredDataMessage;
+import org.apache.logging.log4j.status.StatusLogger;
+import org.apache.logging.log4j.test.appender.ListAppender;
import org.junit.AfterClass;
+import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -38,11 +40,12 @@ import static org.junit.Assert.assertTru
/**
*
*/
-public class LoggerTest {
+public class AppenderRefLevelTest {
- private static final String CONFIG = "log4j-test2.xml";
+ private static final String CONFIG = "log4j-reference-level.xml";
private static Configuration config;
- private static ListAppender app;
+ private static ListAppender app1;
+ private static ListAppender app2;
private static LoggerContext ctx;
@BeforeClass
@@ -51,9 +54,10 @@ public class LoggerTest {
ctx = (LoggerContext) LogManager.getContext(false);
config = ctx.getConfiguration();
for (Map.Entry entry : config.getAppenders().entrySet()) {
- if (entry.getKey().equals("List")) {
- app = (ListAppender) entry.getValue();
- break;
+ if (entry.getKey().equals("LIST1")) {
+ app1 = (ListAppender) entry.getValue();
+ } else if (entry.getKey().equals("LIST2")) {
+ app2 = (ListAppender) entry.getValue();
}
}
}
@@ -65,96 +69,55 @@ public class LoggerTest {
StatusLogger.getLogger().reset();
}
- org.apache.logging.log4j.Logger logger = LogManager.getLogger("LoggerTest");
-
- @Test
- public void basicFlow() {
- logger.entry();
- logger.exit();
- List events = app.getEvents();
- assertTrue("Incorrect number of events. Expected 2, actual " + events.size(), events.size() == 2);
- app.clear();
- }
-
- @Test
- public void simpleFlow() {
- logger.entry(CONFIG);
- logger.exit(0);
- List events = app.getEvents();
- assertTrue("Incorrect number of events. Expected 2, actual " + events.size(), events.size() == 2);
- app.clear();
- }
-
- @Test
- public void throwing() {
- logger.throwing(new IllegalArgumentException("Test Exception"));
- List events = app.getEvents();
- assertTrue("Incorrect number of events. Expected 1, actual " + events.size(), events.size() == 1);
- app.clear();
- }
-
- @Test
- public void catching() {
- try {
- throw new NullPointerException();
- } catch (Exception e) {
- logger.catching(e);
- }
- List events = app.getEvents();
- assertTrue("Incorrect number of events. Expected 1, actual " + events.size(), events.size() == 1);
- app.clear();
+ org.apache.logging.log4j.Logger logger1 = LogManager.getLogger("org.apache.logging.log4j.test1");
+ org.apache.logging.log4j.Logger logger2 = LogManager.getLogger("org.apache.logging.log4j.test2");
+ org.apache.logging.log4j.Logger logger3 = LogManager.getLogger("org.apache.logging.log4j.test3");
+ Marker testMarker = MarkerManager.getMarker("TEST");
+
+ @Before
+ public void before() {
+ app1.clear();
+ app2.clear();
}
@Test
- public void debug() {
- logger.debug("Debug message");
- List events = app.getEvents();
+ public void logger1() {
+ logger1.entry();
+ logger1.debug("debug message");
+ logger1.error("Test Message");
+ logger1.info("Info Message");
+ logger1.warn("warn Message");
+ logger1.exit();
+ List events = app1.getEvents();
+ assertTrue("Incorrect number of events. Expected 6, actual " + events.size(), events.size() == 6);
+ events = app2.getEvents();
assertTrue("Incorrect number of events. Expected 1, actual " + events.size(), events.size() == 1);
- app.clear();
}
@Test
- public void debugObject() {
- logger.debug(new Date());
- List events = app.getEvents();
- assertTrue("Incorrect number of events. Expected 1, actual " + events.size(), events.size() == 1);
- app.clear();
- }
-
- @Test
- public void debugWithParms() {
- logger.debug("Hello, {}", "World");
- List events = app.getEvents();
- assertTrue("Incorrect number of events. Expected 1, actual " + events.size(), events.size() == 1);
- app.clear();
- }
-
- @Test
- public void mdc() {
-
- ThreadContext.put("TestYear", new Integer(2010).toString());
- logger.debug("Debug message");
- ThreadContext.clear();
- logger.debug("Debug message");
- List events = app.getEvents();
+ public void logger2() {
+ logger2.entry();
+ logger2.debug("debug message");
+ logger2.error("Test Message");
+ logger2.info("Info Message");
+ logger2.warn("warn Message");
+ logger2.exit();
+ List events = app1.getEvents();
assertTrue("Incorrect number of events. Expected 2, actual " + events.size(), events.size() == 2);
- app.clear();
+ events = app2.getEvents();
+ assertTrue("Incorrect number of events. Expected 4, actual " + events.size(), events.size() == 4);
}
@Test
- public void structuredData() {
- ThreadContext.put("loginId", "JohnDoe");
- ThreadContext.put("ipAddress", "192.168.0.120");
- ThreadContext.put("locale", Locale.US.getDisplayName());
- StructuredDataMessage msg = new StructuredDataMessage("Audit@18060", "Transfer Complete", "Transfer");
- msg.put("ToAccount", "123456");
- msg.put("FromAccount", "123457");
- msg.put("Amount", "200.00");
- logger.info(MarkerManager.getMarker("EVENT"), msg);
- ThreadContext.clear();
- List events = app.getEvents();
- assertTrue("Incorrect number of events. Expected 1, actual " + events.size(), events.size() == 1);
- app.clear();
+ public void logger3() {
+ logger3.entry();
+ logger3.debug(testMarker, "debug message");
+ logger3.error("Test Message");
+ logger3.info(testMarker, "Info Message");
+ logger3.warn("warn Message");
+ logger3.exit();
+ List events = app1.getEvents();
+ assertTrue("Incorrect number of events. Expected 4, actual " + events.size(), events.size() == 4);
}
}
Copied: logging/log4j/log4j2/trunk/core/src/test/resources/log4j-reference-level.xml (from r1332056, logging/log4j/log4j2/trunk/core/src/test/resources/log4j-test1.xml)
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/test/resources/log4j-reference-level.xml?p2=logging/log4j/log4j2/trunk/core/src/test/resources/log4j-reference-level.xml&p1=logging/log4j/log4j2/trunk/core/src/test/resources/log4j-test1.xml&r1=1332056&r2=1337783&rev=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/test/resources/log4j-test1.xml (original)
+++ logging/log4j/log4j2/trunk/core/src/test/resources/log4j-reference-level.xml Sun May 13 05:42:27 2012
@@ -17,37 +17,29 @@
-->
-
- target/test.log
-
-
-
-
-
- %d %p %C{1.} [%t] %m%n
-
-
-
-
-
-
-
+
+
-
-
-
-
-
+
+
+ >
-
+
+
+ >
+
+
+
+
+ >
Modified: logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing.json
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing.json?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing.json (original)
+++ logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing.json Sun May 13 05:42:27 2012
@@ -37,8 +37,8 @@
"SizeBasedTriggeringPolicy": { "size": "500" }
}
},
- { "appender-ref": "STDOUT", "key": "Audit"},
- { "appender-ref": "List", "key": "Service"}
+ { "ref": "STDOUT", "key": "Audit"},
+ { "ref": "List", "key": "Service"}
]
}
}
Modified: logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing.xml?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing.xml (original)
+++ logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing.xml Sun May 13 05:42:27 2012
@@ -40,8 +40,8 @@
-
-
+
+
Modified: logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing2.json
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing2.json?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing2.json (original)
+++ logging/log4j/log4j2/trunk/core/src/test/resources/log4j-routing2.json Sun May 13 05:42:27 2012
@@ -34,8 +34,8 @@
"SizeBasedTriggeringPolicy": { "size": "500" }
}
},
- { "appender-ref": "STDOUT", "key": "Audit"},
- { "appender-ref": "List", "key": "Service"}
+ { "ref": "STDOUT", "key": "Audit"},
+ { "ref": "List", "key": "Service"}
]
}
}
Modified: logging/log4j/log4j2/trunk/src/site/xdoc/manual/architecture.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/site/xdoc/manual/architecture.xml?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/site/xdoc/manual/architecture.xml (original)
+++ logging/log4j/log4j2/trunk/src/site/xdoc/manual/architecture.xml Sun May 13 05:42:27 2012
@@ -490,8 +490,9 @@
In addition to the automatic log Level filtering that takes place as described in the previous
section, Log4j provides
Filters that can
- be applied before control is passed to any LoggerConfig, after control is pased to a LoggerConfig
- but before calling any Appenders, and on each Appender. In a manner very similar to firewall filters,
+ be applied before control is passed to any LoggerConfig, after control is passed to a LoggerConfig
+ but before calling any Appenders, after control is passed to a LoggerConfig but before calling a
+ specific Appender, and on each Appender. In a manner very similar to firewall filters,
each Filter can return one of three results, Accept, Deny or Neutral. A response of Accept means
that no other Filters should be called and the event should progress. A response of Deny means
the event should be immediately ignored and control should be returned to the caller. A response
Modified: logging/log4j/log4j2/trunk/src/site/xdoc/manual/configuration.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/site/xdoc/manual/configuration.xml?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/site/xdoc/manual/configuration.xml (original)
+++ logging/log4j/log4j2/trunk/src/site/xdoc/manual/configuration.xml Sun May 13 05:42:27 2012
@@ -569,13 +569,15 @@
Configuring Filters
- Log4j allows a filter to be specified in any of 3 places:
+ Log4j allows a filter to be specified in any of 4 places:
At the same level as the appenders, loggers and properties elements. These filters can accept
or reject events before they have been passed to a LoggerConfig.
In a logger element. These filters can accept or reject events for specific loggers.
In an appender element. These filters can prevent or cause events to be processed by
the appender.
+
In an appender reference element. These filters are used to determine if a Logger should route
+ the event to an appender.
@@ -594,10 +596,6 @@
-
-
-
-
@@ -624,7 +622,12 @@
>
-
+
+
+
+
+
+ >
Modified: logging/log4j/log4j2/trunk/src/site/xdoc/manual/filters.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/site/xdoc/manual/filters.xml?rev=1337783&r1=1337782&r2=1337783&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/site/xdoc/manual/filters.xml (original)
+++ logging/log4j/log4j2/trunk/src/site/xdoc/manual/filters.xml Sun May 13 05:42:27 2012
@@ -30,7 +30,7 @@
one of 3 values - ACCEPT, DENY or NEUTRAL.
- Filters may be configured in one of three locations;
+ Filters may be configured in one of four locations;
Context-wide Filters are configured directly in the configuration. Events that are
rejected by these filters will not be passed to loggers for further processing. Once an
@@ -43,6 +43,8 @@
of the additivity setting.
Appender Filters are used to determine if a specific Appender should handle the
formatting and publication of the event.
+
Appender Reference Filters are used to determine if a Logger should route the event to
+ an appender.
@@ -283,6 +285,62 @@
]]>
+
+ This sample configuration will exhibit the same behavior as the preceding example since the only
+ logger configured is the root.
+
+
+
+
+ This third sample configuration will exhibit the same behavior as the preceding examples since the only
+ logger configured is the root and the root is only configured with a single appender reference.
+
+
+