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 2012/08/10 04:14:51 UTC
svn commit: r1371545 - in /logging/log4j/log4j2/trunk:
core/src/main/java/org/apache/logging/log4j/core/config/plugins/ flume-ng/
flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/ src/changes/
Author: rgoers
Date: Fri Aug 10 02:14:51 2012
New Revision: 1371545
URL: http://svn.apache.org/viewvc?rev=1371545&view=rev
Log:
Fix LOG4J2-67 - Allow Plugins outside of core to use a PluginMap
Modified:
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
logging/log4j/log4j2/trunk/flume-ng/pom.xml
logging/log4j/log4j2/trunk/flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAvroAppenderTest.java
logging/log4j/log4j2/trunk/src/changes/changes.xml
Modified: logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java?rev=1371545&r1=1371544&r2=1371545&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java (original)
+++ logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java Fri Aug 10 02:14:51 2012
@@ -24,9 +24,13 @@ import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
+import java.io.File;
import java.io.FileOutputStream;
+import java.io.IOException;
import java.io.InputStream;
+import java.net.URL;
import java.text.DecimalFormat;
+import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -83,7 +87,9 @@ public class PluginManager {
rootDir = args[0].endsWith("/") || args[0].endsWith("\\") ? args[0] : args[0] + "/";
PluginManager manager = new PluginManager("Core");
- manager.collectPlugins(false);
+ String packages = args.length == 2 ? args[1] : null;
+
+ manager.collectPlugins(false, packages);
encode(pluginTypeMap);
}
@@ -116,14 +122,16 @@ public class PluginManager {
* Locates all the plugins.
*/
public void collectPlugins() {
- collectPlugins(true);
+ collectPlugins(true, null);
}
/**
* Collects plugins, optionally obtaining them from a preload map.
* @param preLoad if true, plugins will be obtained from the preload map.
+ * @param pkgs A comma separated list of package names to scan for plugins. If
+ * null the default Log4j package name will be used.
*/
- public void collectPlugins(boolean preLoad) {
+ public void collectPlugins(boolean preLoad, String pkgs) {
if (pluginTypeMap.containsKey(type)) {
plugins = pluginTypeMap.get(type);
preLoad = false;
@@ -144,7 +152,14 @@ public class PluginManager {
}
}
if (plugins.size() == 0) {
- packages.add(LOG4J_PACKAGES);
+ if (pkgs == null) {
+ packages.add(LOG4J_PACKAGES);
+ } else {
+ String[] names = pkgs.split(",");
+ for (String name : names) {
+ packages.add(name);
+ }
+ }
}
ResolverUtil.Test test = new PluginTest(clazz);
for (String pkg : packages) {
@@ -174,40 +189,52 @@ public class PluginManager {
}
private static ConcurrentMap<String, ConcurrentMap<String, PluginType>> decode(ClassLoader loader) {
- String resource = PATH + FILENAME;
+ Enumeration<URL> resources;
try {
- InputStream is = loader.getResourceAsStream(resource);
- BufferedInputStream bis = new BufferedInputStream(is);
- DataInputStream dis = new DataInputStream(bis);
- int count = dis.readInt();
- ConcurrentMap<String, ConcurrentMap<String, PluginType>> map =
- new ConcurrentHashMap<String, ConcurrentMap<String, PluginType>>(count);
- for (int j = 0; j < count; ++j) {
- String type = dis.readUTF();
- int entries = dis.readInt();
- ConcurrentMap<String, PluginType> types = new ConcurrentHashMap<String, PluginType>(count);
- for (int i = 0; i < entries; ++i) {
- String key = dis.readUTF();
- String className = dis.readUTF();
- String name = dis.readUTF();
- boolean printable = dis.readBoolean();
- boolean defer = dis.readBoolean();
- Class clazz = Class.forName(className);
- types.put(key, new PluginType(clazz, name, printable, defer));
+ resources = loader.getResources(PATH + FILENAME);
+ } catch (IOException ioe) {
+ LOGGER.warn("Unable to preload plugins", ioe);
+ return null;
+ }
+ ConcurrentMap<String, ConcurrentMap<String, PluginType>> map =
+ new ConcurrentHashMap<String, ConcurrentMap<String, PluginType>>();
+ while (resources.hasMoreElements()) {
+ try {
+ URL url = resources.nextElement();
+ LOGGER.debug("Found Plugin Map at {}", url.toExternalForm());
+ InputStream is = url.openStream();
+ BufferedInputStream bis = new BufferedInputStream(is);
+ DataInputStream dis = new DataInputStream(bis);
+ int count = dis.readInt();
+ for (int j = 0; j < count; ++j) {
+ String type = dis.readUTF();
+ int entries = dis.readInt();
+ ConcurrentMap<String, PluginType> types = new ConcurrentHashMap<String, PluginType>(count);
+ for (int i = 0; i < entries; ++i) {
+ String key = dis.readUTF();
+ String className = dis.readUTF();
+ String name = dis.readUTF();
+ boolean printable = dis.readBoolean();
+ boolean defer = dis.readBoolean();
+ Class clazz = Class.forName(className);
+ types.put(key, new PluginType(clazz, name, printable, defer));
+ }
+ map.putIfAbsent(type, types);
}
- map.putIfAbsent(type, types);
+ dis.close();
+ } catch (Exception ex) {
+ LOGGER.warn("Unable to preload plugins", ex);
+ return null;
}
- dis.close();
- return map;
- } catch (Exception ex) {
- LOGGER.warn("Unable to preload plugins", ex);
- return null;
}
+ return map.size() == 0 ? null : map;
}
private static void encode(ConcurrentMap<String, ConcurrentMap<String, PluginType>> map) {
String fileName = rootDir + PATH + FILENAME;
try {
+ File file = new File(rootDir + PATH);
+ file.mkdirs();
FileOutputStream fos = new FileOutputStream(fileName);
BufferedOutputStream bos = new BufferedOutputStream(fos);
DataOutputStream dos = new DataOutputStream(bos);
Modified: logging/log4j/log4j2/trunk/flume-ng/pom.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/flume-ng/pom.xml?rev=1371545&r1=1371544&r2=1371545&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/flume-ng/pom.xml (original)
+++ logging/log4j/log4j2/trunk/flume-ng/pom.xml Fri Aug 10 02:14:51 2012
@@ -84,6 +84,26 @@
<forkMode>always</forkMode>
</configuration>
</plugin>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>exec-maven-plugin</artifactId>
+ <version>1.2.1</version>
+ <executions>
+ <execution>
+ <phase>process-classes</phase>
+ <goals>
+ <goal>java</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <mainClass>org.apache.logging.log4j.core.config.plugins.PluginManager</mainClass>
+ <arguments>
+ <argument>${project.build.outputDirectory}</argument>
+ <argument>org.apache.logging.log4j.flume.appender</argument>
+ </arguments>
+ </configuration>
+ </plugin>
</plugins>
</build>
<reporting>
Modified: logging/log4j/log4j2/trunk/flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAvroAppenderTest.java
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAvroAppenderTest.java?rev=1371545&r1=1371544&r2=1371545&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAvroAppenderTest.java (original)
+++ logging/log4j/log4j2/trunk/flume-ng/src/test/java/org/apache/logging/log4j/flume/appender/FlumeAvroAppenderTest.java Fri Aug 10 02:14:51 2012
@@ -69,7 +69,6 @@ public class FlumeAvroAppenderTest {
@BeforeClass
public static void setupClass() {
- PluginManager.addPackage("org.apache.logging.log4j.flume");
ctx = (LoggerContext) LogManager.getContext();
}
Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1371545&r1=1371544&r2=1371545&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
+++ logging/log4j/log4j2/trunk/src/changes/changes.xml Fri Aug 10 02:14:51 2012
@@ -23,6 +23,10 @@
<body>
<release version="2.0-alpha2" date="TBD" description="Bug fixes and minor enhancements">
+ <action issue="LOG4J2-67" dev="rgoers" type="add">
+ Allow components besides core to create a PluginMap for faster plugin loading and not
+ having to specify the plugin package in the configuration.
+ </action>
<action issue="LOG4J2-64" dev="rgoers" type="fix">
Fix compilation problems in Java 7.
</action>