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]