You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by ca...@apache.org on 2008/01/17 21:10:25 UTC
svn commit: r612959 -
/logging/log4j/trunk/src/main/java/org/apache/log4j/net/TelnetAppender.java
Author: carnold
Date: Thu Jan 17 12:10:23 2008
New Revision: 612959
URL: http://svn.apache.org/viewvc?rev=612959&view=rev
Log:
Bug 44108: TelnetAppender misses messages when one of many clients disconnect
Modified:
logging/log4j/trunk/src/main/java/org/apache/log4j/net/TelnetAppender.java
Modified: logging/log4j/trunk/src/main/java/org/apache/log4j/net/TelnetAppender.java
URL: http://svn.apache.org/viewvc/logging/log4j/trunk/src/main/java/org/apache/log4j/net/TelnetAppender.java?rev=612959&r1=612958&r2=612959&view=diff
==============================================================================
--- logging/log4j/trunk/src/main/java/org/apache/log4j/net/TelnetAppender.java (original)
+++ logging/log4j/trunk/src/main/java/org/apache/log4j/net/TelnetAppender.java Thu Jan 17 12:10:23 2008
@@ -17,13 +17,17 @@
package org.apache.log4j.net;
-import java.io.*;
-import java.net.*;
-import java.util.*;
-import org.apache.log4j.Layout;
-import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.helpers.LogLog;
+import org.apache.log4j.spi.LoggingEvent;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Vector;
/**
<p>The TelnetAppender is a log4j appender that specializes in
@@ -104,15 +108,16 @@
message to each connected client. */
protected void append(LoggingEvent event) {
if(sh != null) {
- sh.send(this.layout.format(event));
+ sh.send(layout.format(event));
if(layout.ignoresThrowable()) {
String[] s = event.getThrowableStrRep();
if (s != null) {
- int len = s.length;
- for(int i = 0; i < len; i++) {
- sh.send(s[i]);
- sh.send(Layout.LINE_SEP);
- }
+ StringBuffer buf = new StringBuffer();
+ for(int i = 0; i < s.length; i++) {
+ buf.append(s[i]);
+ buf.append("\r\n");
+ }
+ sh.send(buf.toString());
}
}
}
@@ -139,10 +144,12 @@
* @since 1.2.15
*/
public void close() {
- for(Enumeration e = connections.elements();e.hasMoreElements();) {
- try {
- ((Socket)e.nextElement()).close();
- } catch(Exception ex) {
+ synchronized(this) {
+ for(Enumeration e = connections.elements();e.hasMoreElements();) {
+ try {
+ ((Socket)e.nextElement()).close();
+ } catch(Exception ex) {
+ }
}
}
@@ -153,16 +160,15 @@
}
/** sends a message to each of the clients in telnet-friendly output. */
- public void send(String message) {
- Enumeration ce = connections.elements();
- for(Enumeration e = writers.elements();e.hasMoreElements();) {
- Socket sock = (Socket)ce.nextElement();
- PrintWriter writer = (PrintWriter)e.nextElement();
+ public synchronized void send(final String message) {
+ Iterator ce = connections.iterator();
+ for(Iterator e = writers.iterator();e.hasNext();) {
+ ce.next();
+ PrintWriter writer = (PrintWriter)e.next();
writer.print(message);
if(writer.checkError()) {
- // The client has closed the connection, remove it from our list:
- connections.remove(sock);
- writers.remove(writer);
+ ce.remove();
+ e.remove();
}
}
}
@@ -177,11 +183,13 @@
Socket newClient = serverSocket.accept();
PrintWriter pw = new PrintWriter(newClient.getOutputStream());
if(connections.size() < MAX_CONNECTIONS) {
- connections.addElement(newClient);
- writers.addElement(pw);
- pw.print("TelnetAppender v1.0 (" + connections.size()
- + " active connections)\r\n\r\n");
- pw.flush();
+ synchronized(this) {
+ connections.addElement(newClient);
+ writers.addElement(pw);
+ pw.print("TelnetAppender v1.0 (" + connections.size()
+ + " active connections)\r\n\r\n");
+ pw.flush();
+ }
} else {
pw.print("Too many connections.\r\n");
pw.flush();
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org