Author: rgoers
Date: Mon Jun 13 07:18:09 2011
New Revision: 1135035

URL: http://svn.apache.org/viewvc?rev=1135035&view=rev
Log:
Add SocketServer. Fix serialization of LogEvents.

Added:
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/AbstractServer.java
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/SocketServer.java
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/ListAppender.java
      - copied, changed from r1128132, 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/ListAppender.java
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/net/
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/net/SocketServerTest.java
      - copied, changed from r1133258, 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
Removed:
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/ListAppender.java
Modified:
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j12-api/pom.xml
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/pom.xml
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/Logger.java
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/layout/SerializedLayout.java
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/DatagramOutputStream.java
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/TCPSocketManager.java
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/layout/SerializedLayoutTest.java
    
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-jcl/log4j2-jcl.iml
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-jcl/pom.xml
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/pom.xml
    logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/slf4j-impl/pom.xml

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j12-api/pom.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j12-api/pom.xml?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j12-api/pom.xml 
(original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j12-api/pom.xml 
Mon Jun 13 07:18:09 2011
@@ -40,11 +40,18 @@
       <artifactId>log4j2-api</artifactId>
       <version>1.99.0-SNAPSHOT</version>
     </dependency>
-     <dependency>
+    <dependency>
       <groupId>org.apache.logging</groupId>
       <artifactId>log4j2-core</artifactId>
       <version>1.99.0-SNAPSHOT</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.logging</groupId>
+      <artifactId>log4j2-core</artifactId>
+      <version>1.99.0-SNAPSHOT</version>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
  <distributionManagement>
     <site>

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/pom.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/pom.xml?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/pom.xml 
(original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/pom.xml 
Mon Jun 13 07:18:09 2011
@@ -80,6 +80,17 @@
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
           <forkMode>always</forkMode>

Added: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/AbstractServer.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/AbstractServer.java?rev=1135035&view=auto
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/AbstractServer.java
 (added)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/AbstractServer.java
 Mon Jun 13 07:18:09 2011
@@ -0,0 +1,38 @@
+/*
+ * 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;
+
+import org.apache.logging.log4j.LogManager;
+
+/**
+ *
+ */
+public class AbstractServer {
+
+    private LoggerContext context;
+
+    protected AbstractServer() {
+        context = (LoggerContext) LogManager.getContext();
+    }
+
+    protected void log(LogEvent event) {
+        Logger logger = context.getLogger(event.getLoggerName());
+        if (logger.config.filter(event.getLevel(), event.getMarker(), 
event.getMessage(), event.getThrown())) {
+            logger.config.logEvent(event);
+        }
+    }
+}

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/Logger.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/Logger.java?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/Logger.java
 (original)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/Logger.java
 Mon Jun 13 07:18:09 2011
@@ -209,6 +209,10 @@ public class Logger extends AbstractLogg
             this.logger = pc.logger;
         }
 
+        protected void logEvent(LogEvent event) {
+            loggerConfig.log(event);
+        }
+
         boolean filter(Level level, Marker marker, String msg) {
             if (config.hasFilters()) {
                 Iterator<Filter> iter = config.getFilters();

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
 (original)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
 Mon Jun 13 07:18:09 2011
@@ -152,7 +152,7 @@ public class LoggerConfig extends Filter
         log(event);
     }
 
-    private void log(LogEvent event) {
+    public void log(LogEvent event) {
         if (isFiltered(event)) {
             return;
         }

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/layout/SerializedLayout.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/layout/SerializedLayout.java?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/layout/SerializedLayout.java
 (original)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/layout/SerializedLayout.java
 Mon Jun 13 07:18:09 2011
@@ -23,10 +23,12 @@ import org.apache.logging.log4j.core.con
 import org.apache.logging.log4j.core.helpers.Transform;
 
 import java.io.ByteArrayOutputStream;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InterruptedIOException;
 import java.io.LineNumberReader;
 import java.io.ObjectOutputStream;
+import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.io.StringReader;
 import java.io.StringWriter;
@@ -41,6 +43,20 @@ import java.util.Map;
  */
 
@Plugin(name="SerializedLayout",type="Core",elementType="layout",printObject=true)
 public class SerializedLayout extends LayoutBase {
+    private static int count = 0;
+
+    private static byte[] header;
+
+    static {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        try {
+            ObjectOutputStream oos = new ObjectOutputStream(baos);
+            oos.close();
+            header = baos.toByteArray();
+        } catch (Exception ex) {
+            logger.error("Unable to generate Object stream header", ex);
+        }
+    }
 
     public SerializedLayout() {
     }
@@ -51,7 +67,7 @@ public class SerializedLayout extends La
     public byte[] format(final LogEvent event) {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
         try {
-            ObjectOutputStream oos = new ObjectOutputStream(baos);
+            ObjectOutputStream oos = new PrivateObjectOutputStream(baos);
             oos.writeObject(event);
         } catch (IOException ioe) {
             logger.error("Serialization of Logging Event failed.", ioe);
@@ -64,4 +80,25 @@ public class SerializedLayout extends La
 
         return new SerializedLayout();
     }
+
+    public byte[] getHeader() {
+        return header;
+    }
+
+    /**
+     * The stream header will be written in the Manager so skip it here.
+     */
+    private class PrivateObjectOutputStream extends ObjectOutputStream {
+
+        public PrivateObjectOutputStream() throws IOException {
+        }
+
+        public PrivateObjectOutputStream(OutputStream os) throws IOException {
+            super(os);
+        }
+
+        @Override
+        protected void writeStreamHeader() {
+        }
+    }
 }

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/DatagramOutputStream.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/DatagramOutputStream.java?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/DatagramOutputStream.java
 (original)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/DatagramOutputStream.java
 Mon Jun 13 07:18:09 2011
@@ -27,7 +27,6 @@ import java.net.DatagramSocket;
 import java.net.InetAddress;
 import java.net.SocketException;
 import java.net.UnknownHostException;
-import java.util.Arrays;
 
 /**
  *

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
 (original)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/DatagramSocketManager.java
 Mon Jun 13 07:18:09 2011
@@ -34,7 +34,8 @@ public class DatagramSocketManager exten
         if (port <= 0) {
             throw new IllegalArgumentException("A port value is required");
         }
-        return (DatagramSocketManager) getManager("UDP:" + host +":" + port, 
factory, new FactoryData(host, port));
+        return (DatagramSocketManager) getManager("UDP:" + host +":" + port, 
factory,
+            new FactoryData(host, port));
     }
 
     public DatagramSocketManager(OutputStream os, String name, String host, 
int port) {

Added: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/SocketServer.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/SocketServer.java?rev=1135035&view=auto
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/SocketServer.java
 (added)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/SocketServer.java
 Mon Jun 13 07:18:09 2011
@@ -0,0 +1,227 @@
+/*
+ * 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.net;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.AbstractServer;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.ConfigurationFactory;
+import org.apache.logging.log4j.core.config.XMLConfiguration;
+import org.apache.logging.log4j.core.config.XMLConfigurationFactory;
+import org.xml.sax.InputSource;
+
+import java.io.BufferedReader;
+import java.io.EOFException;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.ObjectInputStream;
+import java.io.OptionalDataException;
+import java.net.MalformedURLException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.URL;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+/**
+ *
+ */
+public class SocketServer extends AbstractServer implements Runnable {
+
+    private static Logger logger;
+
+    private boolean isActive = true;
+
+    private ServerSocket server;
+
+    private ConcurrentMap<Long, SocketHandler> handlers = new 
ConcurrentHashMap<Long, SocketHandler>();
+
+    public static void main(String[] args) throws Exception {
+        if (args.length < 1 || args.length > 2) {
+            System.err.println("Incorrect number of arguments");
+            printUsage();
+            return;
+        }
+        int port = Integer.parseInt(args[0]);
+        if (port <= 0 || port > 65535) {
+            System.err.println("Invalid port number");
+            printUsage();
+            return;
+        }
+        if (args.length == 2 && args[1].length() > 0) {
+            ConfigurationFactory.setConfigurationFactory(new 
ServerConfigurationFactory(args[1]));
+        }
+        logger = LogManager.getLogger(SocketServer.class.getName());
+        SocketServer sserver = new SocketServer(port);
+        Thread server = new Thread(sserver);
+        server.start();
+        BufferedReader reader = new BufferedReader(new 
InputStreamReader(System.in));
+        while (true) {
+            String line = reader.readLine();
+            if (line.equalsIgnoreCase("Quit") || line.equalsIgnoreCase("Stop") 
|| line.equalsIgnoreCase("Exit")) {
+                sserver.shutdown();
+                server.join();
+                break;
+            }
+        }
+    }
+
+    private static void printUsage() {
+        System.out.println("Usage: ServerSocket port configFilePath");
+    }
+
+    public SocketServer(int port) throws IOException {
+        server = new ServerSocket(port);
+        if (logger == null) {
+            logger = LogManager.getLogger(getClass().getName());
+        }
+    }
+
+    public void shutdown() {
+        this.isActive = false;
+        Thread.currentThread().interrupt();
+    }
+
+    public void run() {
+        while(isActive)
+        {
+            try
+            {
+                // Accept incoming connections.
+                Socket clientSocket = server.accept();
+
+                // accept() will block until a client connects to the server.
+                // If execution reaches this point, then it means that a client
+                // socket has been accepted.
+
+                SocketHandler handler = new SocketHandler(clientSocket);
+                handlers.put(handler.getId(), handler);
+                handler.start();
+            }
+            catch(IOException ioe)
+            {
+                System.out.println("Exception encountered on accept. Ignoring. 
Stack Trace :");
+                ioe.printStackTrace();
+            }
+        }
+        for (Map.Entry<Long, SocketHandler> entry : handlers.entrySet()) {
+            SocketHandler handler = entry.getValue();
+            handler.shutdown();
+            try {
+                handler.join();
+            } catch (InterruptedException ie) {
+                // Ignore the exception
+            }
+        }
+    }
+
+    private class SocketHandler extends Thread {
+        private final ObjectInputStream ois;
+
+        private boolean shutdown = false;
+
+        public SocketHandler(Socket socket) throws IOException {
+
+            ois = new ObjectInputStream(socket.getInputStream());
+        }
+
+        public void shutdown() {
+            this.shutdown = true;
+            interrupt();
+        }
+
+        public void run() {
+            boolean closed = false;
+            try {
+                try {
+                    while(!shutdown) {
+                        LogEvent event = (LogEvent) ois.readObject();
+                        if (event != null) {
+                            log(event);
+                        }
+                    }
+                } catch (EOFException eof) {
+                    closed = true;
+                } catch (OptionalDataException opt) {
+                    logger.error("OptionalDataException eof=" + opt.eof + " 
length=" + opt.length, opt);
+                } catch (ClassNotFoundException cnfe) {
+                    logger.error("Unable to locate LogEvent class", cnfe);
+                } catch (IOException ioe) {
+                    logger.error("IOException encountered while reading from 
socket", ioe);
+                }
+                if (!closed) {
+                    try {
+                        ois.close();
+                    } catch (Exception ex) {
+                        // Ignore the exception;
+                    }
+                }
+            } finally {
+                handlers.remove(getId());
+            }
+        }
+    }
+
+    private static class ServerConfigurationFactory extends 
XMLConfigurationFactory {
+
+        private final String path;
+
+        public ServerConfigurationFactory(String path) {
+            this.path = path;
+        }
+
+        @Override
+        public Configuration getConfiguration() {
+            if (path != null && path.length() > 0) {
+                InputSource source = null;
+                try {
+                    FileInputStream is = new FileInputStream(path);
+                    source = new InputSource(is);
+                    source.setSystemId(path);
+                } catch (FileNotFoundException ex) {
+                    // Ignore this error
+                }
+                if (source == null) {
+                    try {
+                        URL url = new URL(path);
+                        source = new InputSource(url.openStream());
+                        source.setSystemId(path);
+                    } catch (MalformedURLException mue) {
+                        // Ignore this error
+                    } catch (IOException ioe) {
+                        // Ignore this error
+                    }
+                }
+
+                try {
+                    if (source != null) {
+                        return new XMLConfiguration(source);
+                    }
+                } catch (Exception ex) {
+                    // Ignore this error.
+                }
+                System.err.println("Unable to process configuration at " + 
path + ", using default.");
+            }
+            return super.getConfiguration();
+        }
+    }
+}

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/TCPSocketManager.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/TCPSocketManager.java?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/TCPSocketManager.java
 (original)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/net/TCPSocketManager.java
 Mon Jun 13 07:18:09 2011
@@ -66,7 +66,8 @@ public class TCPSocketManager extends Ab
     }
 
 
-    public TCPSocketManager(String name, OutputStream os, Socket sock, 
InetAddress addr, String host, int port, int delay) {
+    public TCPSocketManager(String name, OutputStream os, Socket sock, 
InetAddress addr, String host, int port,
+                            int delay) {
         super(name, os, addr, host, port);
         this.reconnectionDelay = delay;
         this.socket = sock;

Copied: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/ListAppender.java
 (from r1128132, 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/ListAppender.java)
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/ListAppender.java?p2=logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/ListAppender.java&p1=logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/ListAppender.java&r1=1128132&r2=1135035&rev=1135035&view=diff
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/main/java/org/apache/logging/log4j/core/appender/ListAppender.java
 (original)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/ListAppender.java
 Mon Jun 13 07:18:09 2011
@@ -24,9 +24,11 @@ import org.apache.logging.log4j.core.con
 import org.apache.logging.log4j.core.config.plugins.PluginElement;
 import org.apache.logging.log4j.core.config.plugins.PluginFactory;
 import org.apache.logging.log4j.core.filter.Filters;
+import org.apache.logging.log4j.core.layout.SerializedLayout;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.ObjectOutputStream;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -58,7 +60,7 @@ public class ListAppender extends Append
         super(name, filters, layout);
         this.newLine = newline;
         this.raw = raw;
-        if (layout != null) {
+        if (layout != null && !(layout instanceof SerializedLayout)) {
             byte[] bytes = layout.getHeader();
             if (bytes != null) {
                 write(bytes);
@@ -70,6 +72,13 @@ public class ListAppender extends Append
         Layout layout = getLayout();
         if (layout == null) {
             events.add(event);
+        } else if (layout instanceof SerializedLayout) {
+            byte[] header = layout.getHeader();
+            byte[] content = layout.format(event);
+            byte[] record = new byte[header.length + content.length];
+            System.arraycopy(header, 0, record, 0, header.length);
+            System.arraycopy(content, 0, record, header.length, 
content.length);
+            data.add(record);
         } else {
             write(layout.format(event));
         }

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
 (original)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
 Mon Jun 13 07:18:09 2011
@@ -28,6 +28,7 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 import java.io.ByteArrayInputStream;
+import java.io.EOFException;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.net.DatagramPacket;
@@ -99,6 +100,7 @@ public class SocketAppenderTest {
 
         // set appender on root and set level to debug
         root.addAppender(appender);
+        root.setAdditive(false);
         root.setLevel(Level.DEBUG);
         root.debug("This is a test message");
         LogEvent event = list.poll(3, TimeUnit.SECONDS);
@@ -117,6 +119,7 @@ public class SocketAppenderTest {
 
         // set appender on root and set level to debug
         root.addAppender(appender);
+        root.setAdditive(false);
         root.setLevel(Level.DEBUG);
         root.debug("This is a test message");
         LogEvent event = list.poll(3, TimeUnit.SECONDS);
@@ -162,7 +165,6 @@ public class SocketAppenderTest {
 
         private final ServerSocket sock;
         private boolean shutdown = false;
-        private Thread thread;
 
         public TCPSocketServer() throws IOException {
             this.sock = new ServerSocket(PORTNUM);
@@ -170,20 +172,21 @@ public class SocketAppenderTest {
 
         public void shutdown() {
             this.shutdown = true;
-            thread.interrupt();
+            interrupt();
         }
 
         public void run() {
-            this.thread = Thread.currentThread();
             try {
-                while (!shutdown) {
-                    Socket socket = sock.accept();
-                    if (socket != null) {
-                        ObjectInputStream ois = new 
ObjectInputStream(socket.getInputStream());
-                        ++tcpCount;
+                Socket socket = sock.accept();
+                if (socket != null) {
+                    ObjectInputStream ois = new 
ObjectInputStream(socket.getInputStream());
+                    while (!shutdown) {
                         list.add((LogEvent) ois.readObject());
+                        ++tcpCount;
                     }
                 }
+            } catch (EOFException eof) {
+                // Socket is closed.
             } catch (Exception ex) {
                 if (!shutdown) {
                     throw new RuntimeException(ex);

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/layout/SerializedLayoutTest.java
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/layout/SerializedLayoutTest.java?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/layout/SerializedLayoutTest.java
 (original)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/layout/SerializedLayoutTest.java
 Mon Jun 13 07:18:09 2011
@@ -107,7 +107,13 @@ public class SerializedLayoutTest {
         for (byte[] item : data) {
             ByteArrayInputStream bais = new ByteArrayInputStream(item);
             ObjectInputStream ois = new ObjectInputStream(bais);
-            LogEvent event = (LogEvent) ois.readObject();
+            LogEvent event;
+            try {
+                event = (LogEvent) ois.readObject();
+            } catch (IOException ioe) {
+                System.err.println("Exception processing item " + i);
+                throw ioe;
+            }
             assertTrue("Incorrect event", 
event.toString().equals(expected[i]));
             ++i;
         }

Copied: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/net/SocketServerTest.java
 (from r1133258, 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java)
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/net/SocketServerTest.java?p2=logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/net/SocketServerTest.java&p1=logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java&r1=1133258&r2=1135035&rev=1135035&view=diff
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/appender/SocketAppenderTest.java
 (original)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-core/src/test/java/org/apache/logging/log4j/core/net/SocketServerTest.java
 Mon Jun 13 07:18:09 2011
@@ -14,14 +14,22 @@
  * See the license for the specific language governing permissions and
  * limitations under the license.
  */
-package org.apache.logging.log4j.core.appender;
+package org.apache.logging.log4j.core.net;
 
 import org.apache.logging.log4j.Level;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.Filter;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.logging.log4j.core.Logger;
 import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.appender.ConsoleAppender;
+import org.apache.logging.log4j.core.appender.ListAppender;
+import org.apache.logging.log4j.core.appender.SocketAppender;
+import org.apache.logging.log4j.core.filter.FilterBase;
+import org.apache.logging.log4j.core.filter.Filters;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.apache.logging.log4j.core.net.SocketServer;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
@@ -34,19 +42,20 @@ import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.ServerSocket;
 import java.net.Socket;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.TimeUnit;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
 /**
  *
  */
-public class SocketAppenderTest {
+public class SocketServerTest {
 
     private static final String HOST = "localhost";
     private static final String PORT = "8199";
@@ -54,28 +63,29 @@ public class SocketAppenderTest {
 
     private static BlockingQueue<LogEvent> list = new 
ArrayBlockingQueue<LogEvent>(10);
 
-    private static TCPSocketServer tcp;
-    private static UDPSocketServer udp;
+    private static SocketServer tcp;
+    private static Thread thread;
 
     LoggerContext ctx = (LoggerContext) LogManager.getContext();
-    Logger root = ctx.getLogger("SocketAppenderTest");
-
-    private static int tcpCount = 0;
-    private static int udpCount = 0;
+    Logger root = ctx.getLogger("SocketServerTest");
 
     @BeforeClass
     public static void setupClass() throws Exception {
-        tcp = new TCPSocketServer();
-        tcp.start();
-        udp = new UDPSocketServer();
-        udp.start();
         ((LoggerContext) LogManager.getContext()).reconfigure();
+        tcp = new SocketServer(PORTNUM);
+        thread = new Thread(tcp);
+        thread.start();
+
     }
 
     @AfterClass
     public static void cleanupClass() {
         tcp.shutdown();
-        udp.shutdown();
+        try {
+            thread.join();
+        } catch (InterruptedException iex) {
+
+        }
     }
 
     @After
@@ -86,109 +96,46 @@ public class SocketAppenderTest {
             root.removeAppender(app);
             app.stop();
         }
-        tcpCount = 0;
-        udpCount = 0;
     }
 
     @Test
-    public void testTCPAppender() throws Exception {
-
+    public void testServer() throws Exception {
+        Filter socketFilter = new ThreadFilter(Filter.Result.NEUTRAL, 
Filter.Result.DENY);
+        Filter serverFilter = new ThreadFilter(Filter.Result.DENY, 
Filter.Result.NEUTRAL);
+        Filters socketFilters = Filters.createFilters(new Filter[] 
{socketFilter});
         SocketAppender appender = SocketAppender.createAppender("localhost", 
PORT, "tcp", "-1",
-            "Test", null, null, null, null);
+            "Test", null, null, null, socketFilters);
         appender.start();
-
-        // set appender on root and set level to debug
-        root.addAppender(appender);
-        root.setLevel(Level.DEBUG);
-        root.debug("This is a test message");
-        LogEvent event = list.poll(3, TimeUnit.SECONDS);
-        assertNotNull("No event retrieved", event);
-        assertTrue("Incorrect event", 
event.getMessage().getFormattedMessage().equals("This is a test message"));
-        assertTrue("Message not delivered via TCP", tcpCount > 0);
-    }
-
-
-    @Test
-    public void testUDPAppender() throws Exception {
-
-        SocketAppender appender = SocketAppender.createAppender("localhost", 
PORT, "udp", "-1",
-            "Test", null, null, null, null);
+        Filters serverFilters = Filters.createFilters(new Filter[] 
{serverFilter});
+        ListAppender listApp = new ListAppender("Events", serverFilters, null, 
false, false);
         appender.start();
+        PatternLayout layout = new PatternLayout("%m %ex%n");
+        ConsoleAppender console = ConsoleAppender.createAppender(layout, null, 
"SYSTEM_OUT", "Console");
+        Logger serverLogger = ctx.getLogger(SocketServer.class.getName());
+        serverLogger.addAppender(console);
+        serverLogger.setAdditive(false);
 
         // set appender on root and set level to debug
         root.addAppender(appender);
+        root.addAppender(listApp);
+        root.setAdditive(false);
         root.setLevel(Level.DEBUG);
         root.debug("This is a test message");
-        LogEvent event = list.poll(3, TimeUnit.SECONDS);
-        assertNotNull("No event retrieved", event);
-        assertTrue("Incorrect event", 
event.getMessage().getFormattedMessage().equals("This is a test message"));
-        assertTrue("Message not delivered via UDP", udpCount > 0);
-    }
-
-    public static class UDPSocketServer extends Thread {
-        private final DatagramSocket sock;
-        private boolean shutdown = false;
-        private Thread thread;
-
-        public UDPSocketServer() throws IOException {
-            this.sock = new DatagramSocket(PORTNUM);
-        }
-
-        public void shutdown() {
-            this.shutdown = true;
-            thread.interrupt();
-        }
-
-        public void run() {
-            this.thread = Thread.currentThread();
-            byte[] bytes = new byte[4096];
-            DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
-            try {
-                while (!shutdown) {
-                    sock.receive(packet);
-                    ObjectInputStream ois = new ObjectInputStream(new 
ByteArrayInputStream(packet.getData()));
-                    ++udpCount;
-                    list.add((LogEvent) ois.readObject());
-                }
-            } catch (Exception ex) {
-                if (!shutdown) {
-                    throw new RuntimeException(ex);
-                }
-            }
-        }
+        Thread.sleep(100);
+        List<LogEvent> events = listApp.getEvents();
+        assertNotNull("No event retrieved", events);
+        assertTrue("No events retrieved", events.size() > 0);
+        assertTrue("Incorrect event", 
events.get(0).getMessage().getFormattedMessage().equals("This is a test 
message"));
     }
 
-    public static class TCPSocketServer extends Thread {
-
-        private final ServerSocket sock;
-        private boolean shutdown = false;
-        private Thread thread;
-
-        public TCPSocketServer() throws IOException {
-            this.sock = new ServerSocket(PORTNUM);
-        }
+    private class ThreadFilter extends FilterBase {
 
-        public void shutdown() {
-            this.shutdown = true;
-            thread.interrupt();
+        public ThreadFilter(Result onMatch, Result onMismatch) {
+            super(onMatch, onMismatch);
         }
 
-        public void run() {
-            this.thread = Thread.currentThread();
-            try {
-                while (!shutdown) {
-                    Socket socket = sock.accept();
-                    if (socket != null) {
-                        ObjectInputStream ois = new 
ObjectInputStream(socket.getInputStream());
-                        ++tcpCount;
-                        list.add((LogEvent) ois.readObject());
-                    }
-                }
-            } catch (Exception ex) {
-                if (!shutdown) {
-                    throw new RuntimeException(ex);
-                }
-            }
+        public Filter.Result filter(LogEvent event) {
+            return 
event.getThreadName().equals(Thread.currentThread().getName()) ? onMatch : 
onMismatch;
         }
     }
 

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-jcl/log4j2-jcl.iml
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-jcl/log4j2-jcl.iml?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-jcl/log4j2-jcl.iml 
(original)
+++ 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-jcl/log4j2-jcl.iml 
Mon Jun 13 07:18:09 2011
@@ -3,10 +3,11 @@
   <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5" 
inherit-compiler-output="false">
     <output url="file://$MODULE_DIR$/target/classes" />
     <output-test url="file://$MODULE_DIR$/target/test-classes" />
-    <exclude-output />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/src/main/java" 
isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" 
isTestSource="false" />
       <sourceFolder url="file://$MODULE_DIR$/src/test/java" 
isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" 
isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/target" />
     </content>
     <orderEntry type="inheritedJdk" />
@@ -15,6 +16,7 @@
     <orderEntry type="library" name="Maven: 
commons-logging:commons-logging:1.1.1" level="project" />
     <orderEntry type="module" module-name="log4j2-core" />
     <orderEntry type="module" module-name="log4j2-api" />
+    <orderEntry type="module" module-name="log4j2-core" scope="TEST" />
   </component>
 </module>
 

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-jcl/pom.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-jcl/pom.xml?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-jcl/pom.xml 
(original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/log4j2-jcl/pom.xml 
Mon Jun 13 07:18:09 2011
@@ -33,6 +33,12 @@
       <groupId>org.apache.logging</groupId>
       <artifactId>log4j2-core</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.logging</groupId>
+      <artifactId>log4j2-core</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
 

Modified: logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/pom.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/pom.xml?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/pom.xml (original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/pom.xml Mon Jun 13 
07:18:09 2011
@@ -116,12 +116,18 @@
         <artifactId>log4j2-core</artifactId>
         <version>${project.version}</version>
       </dependency>
+       <dependency>
+        <groupId>org.apache.logging</groupId>
+        <artifactId>log4j2-core</artifactId>
+        <version>${project.version}</version>
+        <type>test-jar</type>
+      </dependency>
       <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>4.3.1</version>
         <scope>test</scope>
-    </dependency>
+      </dependency>
     </dependencies>
   </dependencyManagement>
   <build>

Modified: 
logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/slf4j-impl/pom.xml
URL: 
http://svn.apache.org/viewvc/logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/slf4j-impl/pom.xml?rev=1135035&r1=1135034&r2=1135035&view=diff
==============================================================================
--- logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/slf4j-impl/pom.xml 
(original)
+++ logging/log4j/branches/BRANCH_2_0_EXPERIMENTAL/rgoers/slf4j-impl/pom.xml 
Mon Jun 13 07:18:09 2011
@@ -74,6 +74,12 @@
       <artifactId>log4j2-core</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.logging</groupId>
+      <artifactId>log4j2-core</artifactId>
+      <type>test-jar</type>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <scope>test</scope>



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to