You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-dev@logging.apache.org by ca...@apache.org on 2007/12/01 04:32:06 UTC

svn commit: r600045 - in /logging/log4cxx/trunk: ./ src/examples/cpp/ src/main/cpp/ src/main/include/log4cxx/helpers/ src/main/include/log4cxx/net/

Author: carnold
Date: Fri Nov 30 19:32:04 2007
New Revision: 600045

URL: http://svn.apache.org/viewvc?rev=600045&view=rev
Log:
LOGCXX-7: SocketAppender binary format not compatible with Chainsaw

Added:
    logging/log4cxx/trunk/src/main/cpp/socketoutputstream.cpp
      - copied, changed from r596891, logging/log4cxx/trunk/src/main/cpp/socketoutputstream.cpp
    logging/log4cxx/trunk/src/main/include/log4cxx/helpers/socketoutputstream.h
      - copied, changed from r596891, logging/log4cxx/trunk/src/main/include/log4cxx/helpers/socketoutputstream.h
Modified:
    logging/log4cxx/trunk/build.xml
    logging/log4cxx/trunk/src/examples/cpp/delayedloop.cpp
    logging/log4cxx/trunk/src/main/cpp/Makefile.am
    logging/log4cxx/trunk/src/main/cpp/class.cpp
    logging/log4cxx/trunk/src/main/cpp/objectoutputstream.cpp
    logging/log4cxx/trunk/src/main/cpp/socketappender.cpp
    logging/log4cxx/trunk/src/main/cpp/socketappenderskeleton.cpp
    logging/log4cxx/trunk/src/main/cpp/sockethubappender.cpp
    logging/log4cxx/trunk/src/main/cpp/socketimpl.cpp
    logging/log4cxx/trunk/src/main/cpp/xmlsocketappender.cpp
    logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectoutputstream.h
    logging/log4cxx/trunk/src/main/include/log4cxx/net/socketappender.h
    logging/log4cxx/trunk/src/main/include/log4cxx/net/socketappenderskeleton.h
    logging/log4cxx/trunk/src/main/include/log4cxx/net/sockethubappender.h
    logging/log4cxx/trunk/src/main/include/log4cxx/net/xmlsocketappender.h

Modified: logging/log4cxx/trunk/build.xml
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/build.xml?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/build.xml (original)
+++ logging/log4cxx/trunk/build.xml Fri Nov 30 19:32:04 2007
@@ -204,14 +204,14 @@
     <condition property="mac_osx_wchar_not_supported_yet" value="true">
         <equals arg1="${has.wchar_t}" arg2="1"/>
     </condition>
-    <fail if="mac_osx_wchar_not_supported_yet">
+    <!-- fail if="mac_osx_wchar_not_supported_yet">
 
 wchar_t is not supported in Mac OS/X yet,
 cppunit fails to link
 LogString may become CFString, see bug LOGCXX-85
 
 specify -Dhas.wchar_t=0 on Ant command line for UTF-8 build as work-around
-</fail>
+</fail-->
 </target>
 
 

Modified: logging/log4cxx/trunk/src/examples/cpp/delayedloop.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/examples/cpp/delayedloop.cpp?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/examples/cpp/delayedloop.cpp (original)
+++ logging/log4cxx/trunk/src/examples/cpp/delayedloop.cpp Fri Nov 30 19:32:04 2007
@@ -23,7 +23,6 @@
 #include <iostream>
 #include <log4cxx/stream.h>
 #include <exception>
-#include <locale.h>
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
@@ -99,13 +98,6 @@
                 }
         }
 };
-
-static class LocaleSetter {
-    public:
-    LocaleSetter() {
-       setlocale(LC_ALL, "");
-    }
-} localeSetter;
 
 LoggerPtr DelayedLoop::logger = Logger::getLogger("DelayedLoop");
 

Modified: logging/log4cxx/trunk/src/main/cpp/Makefile.am
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/Makefile.am?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/Makefile.am (original)
+++ logging/log4cxx/trunk/src/main/cpp/Makefile.am Fri Nov 30 19:32:04 2007
@@ -138,6 +138,7 @@
         socketappenderskeleton.cpp \
         sockethubappender.cpp \
         socketimpl.cpp \
+        socketoutputstream.cpp \
         strftimedateformat.cpp \
         stringhelper.cpp \
         stringmatchfilter.cpp \

Modified: logging/log4cxx/trunk/src/main/cpp/class.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/class.cpp?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/class.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/class.cpp Fri Nov 30 19:32:04 2007
@@ -66,7 +66,7 @@
 
 #include <log4cxx/rollingfileappender.h>
 #include <log4cxx/dailyrollingfileappender.h>
-
+#include <apr.h>
 
 
 using namespace log4cxx;
@@ -163,15 +163,13 @@
 //  TODO:
 //        SMTPAppender::registerClass();
 #endif
-#if APR_HAS_THREADS
         SocketAppender::registerClass();
         SocketHubAppender::registerClass();
-#endif        
         SyslogAppender::registerClass();
 #if APR_HAS_THREADS
         TelnetAppender::registerClass();
-        XMLSocketAppender::registerClass();
 #endif
+        XMLSocketAppender::registerClass();
 //       DateLayout::registerClass();
         HTMLLayout::registerClass();
         PatternLayout::registerClass();

Modified: logging/log4cxx/trunk/src/main/cpp/objectoutputstream.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/objectoutputstream.cpp?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/objectoutputstream.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/objectoutputstream.cpp Fri Nov 30 19:32:04 2007
@@ -27,10 +27,8 @@
 
 IMPLEMENT_LOG4CXX_OBJECT(ObjectOutputStream)
 
-ObjectOutputStream::ObjectOutputStream(OutputStreamPtr outputStream, Pool& p) : os(outputStream) 
-#if !LOG4CXX_LOGCHAR_IS_UTF8
-     , utf8Encoder(CharsetEncoder::getUTF8Encoder())
-#endif
+ObjectOutputStream::ObjectOutputStream(OutputStreamPtr outputStream, Pool& p)
+     : os(outputStream) , utf8Encoder(CharsetEncoder::getUTF8Encoder())
 {
    char start[] = { 0xAC, 0xED, 0x00, 0x05 };
    ByteBuffer buf(start, sizeof(start));
@@ -42,6 +40,10 @@
 
 void ObjectOutputStream::close(Pool& p) {
     os->close(p);
+}
+
+void ObjectOutputStream::flush(Pool& p) {
+    os->flush(p);
 }
 
 void ObjectOutputStream::writeObject(const LogString& val, Pool& p) {

Modified: logging/log4cxx/trunk/src/main/cpp/socketappender.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/socketappender.cpp?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/socketappender.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/socketappender.cpp Fri Nov 30 19:32:04 2007
@@ -25,14 +25,12 @@
 #include <apr_time.h>
 #include <apr_atomic.h>
 #include <apr_thread_proc.h>
-#include <log4cxx/helpers/bytearrayoutputstream.h>
+#include <log4cxx/helpers/socketoutputstream.h>
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 using namespace log4cxx::net;
 
-#if APR_HAS_THREADS
-
 IMPLEMENT_LOG4CXX_OBJECT(SocketAppender)
 
 
@@ -50,12 +48,14 @@
 
 SocketAppender::SocketAppender(InetAddressPtr& address1, int port1)
 : SocketAppenderSkeleton(address1, port1, DEFAULT_RECONNECTION_DELAY) {
-        connect();
+    Pool p;
+    activateOptions(p);
 }
 
 SocketAppender::SocketAppender(const LogString& host, int port1)
 : SocketAppenderSkeleton(host, port1, DEFAULT_RECONNECTION_DELAY) {
-        connect();
+    Pool p;
+    activateOptions(p);
 }
 
 SocketAppender::~SocketAppender()
@@ -63,11 +63,41 @@
     finalize();
 }
 
-void SocketAppender::renderEvent(const spi::LoggingEventPtr& event,
-     const helpers::OutputStreamPtr& os1,
-     Pool& p) {
-        ObjectOutputStream os(os1, p);
-        event->write(os, p);
+int SocketAppender::getDefaultDelay() const {
+    return DEFAULT_RECONNECTION_DELAY;
+}
+
+int SocketAppender::getDefaultPort() const {
+    return DEFAULT_PORT;
+}
+
+void SocketAppender::setSocket(log4cxx::helpers::SocketPtr& socket, Pool& p) {
+    synchronized sync(mutex);
+    oos = new ObjectOutputStream(new SocketOutputStream(socket), p);
 }
 
-#endif
+void SocketAppender::cleanUp(Pool& p) {
+    if (oos != 0) {
+        try {
+            oos->close(p);
+            oos = 0;
+        } catch(std::exception& e) {
+        }
+    }
+}
+
+
+void SocketAppender::append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& p) {
+    if (oos != 0) {
+        try {
+           event->write(*oos, p);
+           oos->flush(p);
+        } catch(std::exception& e) {
+           oos = 0;
+           LogLog::warn(LOG4CXX_STR("Detected problem with connection: "), e);
+           if (getReconnectionDelay() > 0) {
+               fireConnector();
+           }
+        }
+    }
+}

Modified: logging/log4cxx/trunk/src/main/cpp/socketappenderskeleton.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/socketappenderskeleton.cpp?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/socketappenderskeleton.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/socketappenderskeleton.cpp Fri Nov 30 19:32:04 2007
@@ -22,9 +22,6 @@
 #include <log4cxx/helpers/stringhelper.h>
 #include <log4cxx/spi/loggingevent.h>
 #include <log4cxx/helpers/synchronized.h>
-#include <apr_time.h>
-#include <apr_atomic.h>
-#include <apr_thread_proc.h>
 #include <log4cxx/helpers/transcoder.h>
 #include <log4cxx/helpers/bytearrayoutputstream.h>
 
@@ -33,13 +30,10 @@
 using namespace log4cxx::helpers;
 using namespace log4cxx::net;
 
-#if APR_HAS_THREADS
-
 SocketAppenderSkeleton::SocketAppenderSkeleton(int defaultPort, int reconnectionDelay1)
 :  remoteHost(),
    address(),
    port(defaultPort),
-   socket(),
    reconnectionDelay(reconnectionDelay1),
    locationInfo(false),
    thread() {
@@ -50,7 +44,6 @@
    remoteHost(),
    address(address1),
    port(port1),
-   socket(),
    reconnectionDelay(delay),
    locationInfo(false),
    thread() {
@@ -60,11 +53,10 @@
 SocketAppenderSkeleton::SocketAppenderSkeleton(const LogString& host, int port1, int delay)
 :   remoteHost(host),
     address(InetAddress::getByName(host)),
-        port(port1),
-    socket(),
+    port(port1),
     reconnectionDelay(delay),
-        locationInfo(false),
-        thread() {
+    locationInfo(false),
+    thread() {
 }
 
 SocketAppenderSkeleton::~SocketAppenderSkeleton()
@@ -72,13 +64,43 @@
         finalize();
 }
 
-void SocketAppenderSkeleton::activateOptions(Pool& /* p */ )
+void SocketAppenderSkeleton::activateOptions(Pool& p)
 {
-        connect();
+        AppenderSkeleton::activateOptions(p);
+        connect(p);
+}
+
+void SocketAppenderSkeleton::close() {
+    synchronized sync(mutex);
+    if (closed) return;
+    closed = true;
+    cleanUp(pool);
+    thread.interrupt();
+}
+
+void SocketAppenderSkeleton::connect(Pool& p) {
+    if (address == 0) {
+        LogLog::error(LogString(LOG4CXX_STR("No remote host is set for Appender named \"")) +
+             name + LOG4CXX_STR("\"."));
+    } else {
+        cleanUp(p);
+        try {
+            SocketPtr socket(new Socket(address, port));
+            setSocket(socket, p);
+        } catch(SocketException& e) {
+                LogString msg = LOG4CXX_STR("Could not connect to remote log4cxx server at [")
+                        +address->getHostName()+LOG4CXX_STR("].");
+                if(reconnectionDelay > 0)
+                {
+                        msg += LOG4CXX_STR(" We will try again later. ");
+                }
+                fireConnector(); // fire the connector thread
+                LogLog::error(msg, e);
+        }
+    }
 }
 
-void SocketAppenderSkeleton::setOption(const LogString& option,
-        const LogString& value, int defaultPort, int defaultDelay)
+void SocketAppenderSkeleton::setOption(const LogString& option, const LogString& value)
 {
         if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("REMOTEHOST"), LOG4CXX_STR("remotehost")))
         {
@@ -86,7 +108,7 @@
         }
         else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("PORT"), LOG4CXX_STR("port")))
         {
-                setPort(OptionConverter::toInt(value, defaultPort));
+                setPort(OptionConverter::toInt(value, getDefaultPort()));
         }
         else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("LOCATIONINFO"), LOG4CXX_STR("locationinfo")))
         {
@@ -94,7 +116,7 @@
         }
         else if (StringHelper::equalsIgnoreCase(option, LOG4CXX_STR("RECONNECTIONDELAY"), LOG4CXX_STR("reconnectiondelay")))
         {
-                setReconnectionDelay(OptionConverter::toInt(value, defaultDelay));
+                setReconnectionDelay(OptionConverter::toInt(value, getDefaultDelay()));
         }
         else
         {
@@ -102,96 +124,6 @@
         }
 }
 
-void SocketAppenderSkeleton::append(const spi::LoggingEventPtr& event, Pool& p)
-{
-        if(address == 0)
-        {
-                errorHandler->error(
-                        LOG4CXX_STR("No remote host is set for appender named \"") +
-                        name+LOG4CXX_STR("\"."));
-                return;
-        }
-
-        if(socket != 0) {
-            try {
-                ByteArrayOutputStreamPtr byteStream(new ByteArrayOutputStream());
-                OutputStreamPtr os(byteStream);
-                renderEvent(event, os, p);
-                std::vector<unsigned char> bytes(byteStream->toByteArray());
-                socket->write(&bytes[0], bytes.size());
-            }
-            catch(SocketException& e) {
-                socket = 0;
-                LogLog::warn(LOG4CXX_STR("Detected problem with connection: "), e);
-
-                if(reconnectionDelay > 0) {
-                        fireConnector();
-                }
-            }
-        }
-}
-
-
-
-void SocketAppenderSkeleton::close()
-{
-    synchronized sync(mutex);
-    if (closed) return;
-    closed = true;
-    cleanUp();
-}
-
-void SocketAppenderSkeleton::cleanUp()
-{
-        if(socket != 0)
-        {
-                try
-                {
-                        socket->close();
-                }
-                catch(IOException& e)
-                {
-                        LogLog::error(LOG4CXX_STR("Could not close socket :"), e);
-                }
-
-                socket = 0;
-        }
-
-        thread.join();
-}
-
-void SocketAppenderSkeleton::connect()
-{
-        if(address == 0)
-        {
-                return;
-        }
-
-        try
-        {
-                // First, close the previous connection if any.
-                cleanUp();
-
-                socket = new Socket(address, port);
-        }
-        catch(SocketException& e)
-        {
-                LogString msg = LOG4CXX_STR("Could not connect to remote log4cxx server at [")
-
-                        +address->getHostName()+LOG4CXX_STR("].");
-
-                if(reconnectionDelay > 0)
-                {
-                        msg += LOG4CXX_STR(" We will try again later. ");
-                }
-
-                fireConnector(); // fire the connector thread
-
-                LogLog::error(msg, e);
-        }
-}
-
-
 void SocketAppenderSkeleton::fireConnector()
 {
         synchronized sync(mutex);
@@ -200,7 +132,7 @@
         }
 }
 
-void* APR_THREAD_FUNC SocketAppenderSkeleton::monitor(log4cxx_thread_t* /* thread */, void* data) {
+void* LOG4CXX_THREAD_FUNC SocketAppenderSkeleton::monitor(log4cxx_thread_t* /* thread */, void* data) {
         SocketAppenderSkeleton* socketAppender = (SocketAppenderSkeleton*) data;
         SocketPtr socket;
         bool isClosed = socketAppender->closed;
@@ -208,18 +140,14 @@
         {
                 try
                 {
-                        apr_sleep(APR_INT64_C(1000) * socketAppender->reconnectionDelay);
-                        LogLog::debug(LOG4CXX_STR("Attempting connection to ")
-                                +socketAppender->address->getHostName());
+                        Thread::sleep(socketAppender->reconnectionDelay);
+                        LogLog::debug(LogString(LOG4CXX_STR("Attempting connection to "))
+                                + socketAppender->address->getHostName());
                         socket = new Socket(socketAppender->address, socketAppender->port);
-
-                        synchronized sync(socketAppender->mutex);
-                        {
-                                socketAppender->socket = socket;
-                                LogLog::debug(LOG4CXX_STR("Connection established. Exiting connector thread."));
-                                socketAppender->thread.ending();
-                                return NULL;
-                        }
+                        Pool p;
+                        socketAppender->setSocket(socket, p);
+                        LogLog::debug(LOG4CXX_STR("Connection established. Exiting connector thread."));
+                        return NULL;
                 }
                 catch(ConnectException&)
                 {
@@ -237,11 +165,9 @@
                                  + LOG4CXX_STR(". Exception is ")
                                  + exmsg);
                 }
-            isClosed = socketAppender->closed;
+                isClosed = socketAppender->closed;
         }
 
         LogLog::debug(LOG4CXX_STR("Exiting Connector.run() method."));
         return NULL;
 }
-
-#endif

Modified: logging/log4cxx/trunk/src/main/cpp/sockethubappender.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/sockethubappender.cpp?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/sockethubappender.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/sockethubappender.cpp Fri Nov 30 19:32:04 2007
@@ -26,7 +26,7 @@
 #include <apr_atomic.h>
 #include <apr_thread_proc.h>
 #include <log4cxx/helpers/objectoutputstream.h>
-#include <log4cxx/helpers/bytearrayoutputstream.h>
+#include <log4cxx/helpers/socketoutputstream.h>
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
@@ -45,12 +45,12 @@
 }
 
 SocketHubAppender::SocketHubAppender()
- : port(DEFAULT_PORT), sockets(), locationInfo(false), thread()
+ : port(DEFAULT_PORT), streams(), locationInfo(false), thread()
 {
 }
 
 SocketHubAppender::SocketHubAppender(int port1)
- : port(port1), sockets(), locationInfo(false), thread()
+ : port(port1), streams(), locationInfo(false), thread()
 {
         startServer();
 }
@@ -97,18 +97,18 @@
         synchronized sync(mutex);
         // close all of the connections
         LogLog::debug(LOG4CXX_STR("closing client connections"));
-        for (std::vector<helpers::SocketPtr>::iterator iter = sockets.begin();
-             iter != sockets.end();
-                 iter++) {
+        for (std::vector<helpers::ObjectOutputStreamPtr>::iterator iter = streams.begin();
+             iter != streams.end();
+             iter++) {
                  if ( (*iter) != NULL) {
                          try {
-                                (*iter)->close();
+                                (*iter)->close(pool);
                          } catch(SocketException& e) {
                                 LogLog::error(LOG4CXX_STR("could not close socket: "), e);
                          }
                  }
          }
-        sockets.erase(sockets.begin(), sockets.end());
+        streams.erase(streams.begin(), streams.end());
 
 
         LogLog::debug(LOG4CXX_STR("SocketHubAppender ")
@@ -119,19 +119,14 @@
 {
 
         // if no open connections, exit now
-        if(sockets.empty())
+        if(streams.empty())
         {
                 return;
         }
 
-        ByteArrayOutputStreamPtr os(new ByteArrayOutputStream());
-        ObjectOutputStream objStream(os, p);
-        event->write(objStream, p);
-        std::vector<unsigned char> bytes(os->toByteArray());
-
         // loop through the current set of open connections, appending the event to each
-        std::vector<SocketPtr>::iterator it = sockets.begin();
-        std::vector<SocketPtr>::iterator itEnd = sockets.end();
+        std::vector<ObjectOutputStreamPtr>::iterator it = streams.begin();
+        std::vector<ObjectOutputStreamPtr>::iterator itEnd = streams.end();
         while(it != itEnd)
         {
                 // list size changed unexpectedly? Just exit the append.
@@ -142,14 +137,14 @@
 
                 try
                 {
-                        (*it)->write(&bytes[0], bytes.size());
+                        event->write(**it, p);
                         it++;
                 }
-                catch(SocketException&)
+                catch(std::exception& e)
                 {
                         // there was an io exception so just drop the connection
-                        it = sockets.erase(it);
-                        LogLog::debug(LOG4CXX_STR("dropped connection"));
+                        it = streams.erase(it);
+                        LogLog::debug(LOG4CXX_STR("dropped connection"), e);
                 }
         }
 }
@@ -162,7 +157,7 @@
 void* APR_THREAD_FUNC SocketHubAppender::monitor(log4cxx_thread_t* /* thread */, void* data) {
         SocketHubAppender* pThis = (SocketHubAppender*) data;
 
-        ServerSocket * serverSocket = 0;
+        ServerSocket* serverSocket = 0;
 
         try
         {
@@ -211,7 +206,10 @@
 
                                 // add it to the oosList.
                                 synchronized sync(pThis->mutex);
-                                pThis->sockets.push_back(socket);
+                                OutputStreamPtr os(new SocketOutputStream(socket));
+                                Pool p;
+                                ObjectOutputStreamPtr oos(new ObjectOutputStream(os, p));
+                                pThis->streams.push_back(oos);
                         }
                         catch (IOException& e)
                         {
@@ -219,7 +217,6 @@
                         }
                 }
         }
-
         delete serverSocket;
         return NULL;
 }

Modified: logging/log4cxx/trunk/src/main/cpp/socketimpl.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/socketimpl.cpp?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/socketimpl.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/socketimpl.cpp Fri Nov 30 19:32:04 2007
@@ -237,7 +237,6 @@
 void SocketImpl::close()
 {
         if (socket != 0) {
-          LOGLOG_DEBUG(LOG4CXX_STR("closing socket"));
           apr_status_t status = apr_socket_close((apr_socket_t*) socket);
           if (status != APR_SUCCESS) {
             throw SocketException(status);
@@ -322,7 +321,6 @@
 size_t SocketImpl::read(void * buf, size_t len) const
 {
 
-// LOGLOG_DEBUG(LOG4CXX_STR("SocketImpl::reading ") << len << LOG4CXX_STR(" bytes."));
         char * p = (char *)buf;
 
         while ((size_t)(p - (char *)buf) < len)
@@ -345,7 +343,6 @@
 // thanks to Yves Mettier (ymettier@libertysurf.fr) for this routine
 size_t SocketImpl::write(const void * buf, size_t len)
 {
-// LOGLOG_DEBUG(LOG4CXX_STR("SocketImpl::write ") << len << LOG4CXX_STR(" bytes."));
 
         const char * p = (const char *)buf;
 

Copied: logging/log4cxx/trunk/src/main/cpp/socketoutputstream.cpp (from r596891, logging/log4cxx/trunk/src/main/cpp/socketoutputstream.cpp)
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/socketoutputstream.cpp?p2=logging/log4cxx/trunk/src/main/cpp/socketoutputstream.cpp&p1=logging/log4cxx/trunk/src/main/cpp/socketoutputstream.cpp&r1=596891&r2=600045&rev=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/socketoutputstream.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/socketoutputstream.cpp Fri Nov 30 19:32:04 2007
@@ -18,126 +18,35 @@
 #include <log4cxx/logstring.h>
 #include <log4cxx/helpers/socketoutputstream.h>
 #include <log4cxx/helpers/socket.h>
-#include <log4cxx/helpers/loglog.h>
+#include <log4cxx/helpers/bytebuffer.h>
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
 
 IMPLEMENT_LOG4CXX_OBJECT(SocketOutputStream)
 
-#define INCREMENT 512
-
-SocketOutputStream::SocketOutputStream(SocketPtr socket1)
-: socket(socket1), beg(0), cur(0), end(0)
-{
-}
-
-SocketOutputStream::~SocketOutputStream()
-{
-   delete [] beg;
-}
-
-void SocketOutputStream::write(const void * buffer, size_t len)
-{
-// LOGLOG_DEBUG (LOG4CXX_STR("SocketOutputStream writing ") << len << LOG4CXX_STR(" bytes."));
-   if (cur + len > end)
-   {
-      if (beg == 0)
-      {
-         size_t size = ((len > INCREMENT) ? len : INCREMENT);
-//       LOGLOG_DEBUG (LOG4CXX_STR("SocketOutputStream growing ") << size << LOG4CXX_STR(" bytes."));
-         beg = new unsigned char[size];
-         end = beg + size;
-         cur = beg;
-      }
-      else
-      {
-         size_t size = end - beg + ((len > INCREMENT) ? len : INCREMENT);
-         unsigned char * old = beg;
-//       LOGLOG_DEBUG (LOG4CXX_STR("SocketOutputStream growing ") <<
-//          ((len > INCREMENT) ? len : INCREMENT) << LOG4CXX_STR(" bytes."));
-         beg = new unsigned char[size];
-         memcpy(beg, old, cur - old);
-         cur = beg + (cur - old);
-         end = beg + size;
-         delete [] old;
-      }
-   }
-
-   memcpy(cur, buffer, len);
-   cur+= len;
-}
-
-void SocketOutputStream::write(unsigned int value)
-{
-   write(&value, sizeof(value));
-}
-
-void SocketOutputStream::write(int value)
-{
-   write(&value, sizeof(value));
+SocketOutputStream::SocketOutputStream(const SocketPtr& socket1)
+: socket(socket1) {
 }
 
-void SocketOutputStream::write(unsigned long value)
-{
-   write(&value, sizeof(value));
+SocketOutputStream::~SocketOutputStream() {
 }
 
-void SocketOutputStream::write(long value)
-{
-   write(&value, sizeof(value));
+void SocketOutputStream::close(Pool& p) {
+    flush(p);
+    socket->close();
 }
 
-void SocketOutputStream::write(const LogString& value)
-{
-   LogString::size_type size;
-
-   size = value.size();
-   if (size > 1024)
-   {
-     size = 1024;
-   }
-
-   write(&size, sizeof(LogString::size_type));
-   if (size > 0)
-   {
-      write(value.c_str(), size * sizeof(logchar));
-   }
+void SocketOutputStream::flush(Pool& p) {
+   socket->write(&array[0], array.size());
+   array.resize(0);
 }
 
-void SocketOutputStream::writeRaw(const LogString& value)
-{
-  LogString::size_type size;
-
-  size = value.size();
-  if (size > 0)
-  {
-    if (size > 1024)
-    {
-      size = 1024;
-    }
-
-    write(value.c_str(), size * sizeof(logchar));
-  }
+void SocketOutputStream::write(ByteBuffer& buf, Pool& /* p */ ) {
+  size_t sz = array.size();
+  array.resize(sz + buf.remaining());
+  memcpy(&array[sz], buf.current(), buf.remaining());
+  buf.position(buf.limit());
 }
 
-void SocketOutputStream::close()
-{
-   // force flushing
-   flush();
 
-   // dereference socket
-   socket = 0;
-}
-
-void SocketOutputStream::flush()
-{
-   if (cur != beg)
-   {
-      // write to socket
-      socket->write(beg, cur - beg);
-
-      // seek to begin
-      cur = beg;
-   }
-}

Modified: logging/log4cxx/trunk/src/main/cpp/xmlsocketappender.cpp
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/cpp/xmlsocketappender.cpp?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/cpp/xmlsocketappender.cpp (original)
+++ logging/log4cxx/trunk/src/main/cpp/xmlsocketappender.cpp Fri Nov 30 19:32:04 2007
@@ -17,8 +17,7 @@
 
 #include <log4cxx/net/xmlsocketappender.h>
 #include <log4cxx/helpers/loglog.h>
-#include <log4cxx/helpers/bytearrayoutputstream.h>
-#include <log4cxx/helpers/bytebuffer.h>
+#include <log4cxx/helpers/outputstreamwriter.h>
 #include <log4cxx/helpers/charsetencoder.h>
 #include <log4cxx/helpers/optionconverter.h>
 #include <log4cxx/helpers/stringhelper.h>
@@ -28,8 +27,7 @@
 #include <apr_time.h>
 #include <log4cxx/helpers/synchronized.h>
 #include <log4cxx/helpers/transcoder.h>
-
-#if APR_HAS_THREADS
+#include <log4cxx/helpers/socketoutputstream.h>
 
 using namespace log4cxx;
 using namespace log4cxx::helpers;
@@ -48,31 +46,24 @@
 
 XMLSocketAppender::XMLSocketAppender()
 : SocketAppenderSkeleton(DEFAULT_PORT, DEFAULT_RECONNECTION_DELAY)
-#if !LOG4CXX_LOGCHAR_IS_UTF8
-    , utf8Encoder(CharsetEncoder::getUTF8Encoder())
-#endif
 {
         layout = new XMLLayout();
 }
 
 XMLSocketAppender::XMLSocketAppender(InetAddressPtr address1, int port1)
 : SocketAppenderSkeleton(address1, port1, DEFAULT_RECONNECTION_DELAY)
-#if !LOG4CXX_LOGCHAR_IS_UTF8
-    , utf8Encoder(CharsetEncoder::getUTF8Encoder())
-#endif
 {
         layout = new XMLLayout();
-        connect();
+        Pool p;
+        activateOptions(p);
 }
 
 XMLSocketAppender::XMLSocketAppender(const LogString& host, int port1)
 : SocketAppenderSkeleton(host, port1, DEFAULT_RECONNECTION_DELAY)
-#if !LOG4CXX_LOGCHAR_IS_UTF8
-    , utf8Encoder(CharsetEncoder::getUTF8Encoder())
-#endif
 {
         layout = new XMLLayout();
-        connect();
+        Pool p;
+        activateOptions(p);
 }
 
 XMLSocketAppender::~XMLSocketAppender() {
@@ -80,35 +71,48 @@
 }
 
 
-void XMLSocketAppender::setLocationInfo(bool locationInfo1) {
-        this->locationInfo = locationInfo1;
-        XMLLayoutPtr xmlLayout(layout);
-        xmlLayout->setLocationInfo(locationInfo1);
+int XMLSocketAppender::getDefaultDelay() const {
+    return DEFAULT_RECONNECTION_DELAY;
 }
 
+int XMLSocketAppender::getDefaultPort() const {
+    return DEFAULT_PORT;
+}
 
-void XMLSocketAppender::renderEvent(const spi::LoggingEventPtr& event,
-    const helpers::OutputStreamPtr& os1, Pool& p)
-{
+void XMLSocketAppender::setSocket(log4cxx::helpers::SocketPtr& socket, Pool& p) {
+    OutputStreamPtr os(new SocketOutputStream(socket));
+    CharsetEncoderPtr charset(CharsetEncoder::getUTF8Encoder());
+    synchronized sync(mutex);
+    writer = new OutputStreamWriter(os, charset);
+}
+
+void XMLSocketAppender::cleanUp(Pool& p) {
+    if (writer != 0) {
+        try {
+            writer->close(p);
+            writer = 0;
+        } catch(std::exception &e) {
+        }
+    }
+}
+
+void XMLSocketAppender::append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& p) {
+    if (writer != 0) {
         LogString output;
         layout->format(output, event, p);
-#if LOG4CXX_LOGCHAR_IS_UTF8
-        ByteBuffer buf(const_cast<char*>(output.data()), output.size());
-#else
-        size_t maxSize = output.size() * 6;
-        char* bytes = (char*) apr_palloc((apr_pool_t*) p.getAPRPool(), maxSize);
-        ByteBuffer buf(bytes, maxSize);
-        LogString::const_iterator iter(output.begin());
-        utf8Encoder->encode(output, iter, buf);
-        buf.flip();  
-#endif
-        os1->write(buf, p);
-}
-
-void XMLSocketAppender::setOption(const LogString& option,
-      const LogString& value) {
-        SocketAppenderSkeleton::setOption(option, value, DEFAULT_PORT, DEFAULT_RECONNECTION_DELAY);
+        try {
+            writer->write(output, p);
+            writer->flush(p);
+        } catch(std::exception& e) {
+           writer = 0;
+           LogLog::warn(LOG4CXX_STR("Detected problem with connection: "), e);
+           if (getReconnectionDelay() > 0) {
+               fireConnector();
+           }
+        }
+    }
 }
 
-#endif
+
+
 

Modified: logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectoutputstream.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectoutputstream.h?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectoutputstream.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/helpers/objectoutputstream.h Fri Nov 30 19:32:04 2007
@@ -27,7 +27,6 @@
         namespace helpers {
           class OutputStream;
           typedef helpers::ObjectPtrT<OutputStream> OutputStreamPtr;
-          class ByteBuffer;
           class CharsetEncoder;
           typedef helpers::ObjectPtrT<CharsetEncoder> CharsetEncoderPtr;
 
@@ -46,6 +45,7 @@
                   virtual ~ObjectOutputStream();
 
                   void close(Pool& p);
+                  void flush(Pool& p);
                   void writeUTF(const LogString&, Pool& p);
                   void writeObject(const LogString&, Pool& p);
                   void writeObject(const std::map<LogString, LogString>& mdc, Pool& p);
@@ -74,10 +74,10 @@
                   ObjectOutputStream& operator=(const ObjectOutputStream&);
                      
                   OutputStreamPtr os;
-#if !LOG4CXX_LOGCHAR_IS_UTF8
                   log4cxx::helpers::CharsetEncoderPtr utf8Encoder;
-#endif                 
           };
+          
+          typedef helpers::ObjectPtrT<ObjectOutputStream> ObjectOutputStreamPtr;          
 
         } // namespace helpers
 

Copied: logging/log4cxx/trunk/src/main/include/log4cxx/helpers/socketoutputstream.h (from r596891, logging/log4cxx/trunk/src/main/include/log4cxx/helpers/socketoutputstream.h)
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/helpers/socketoutputstream.h?p2=logging/log4cxx/trunk/src/main/include/log4cxx/helpers/socketoutputstream.h&p1=logging/log4cxx/trunk/src/main/include/log4cxx/helpers/socketoutputstream.h&r1=596891&r2=600045&rev=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/helpers/socketoutputstream.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/helpers/socketoutputstream.h Fri Nov 30 19:32:04 2007
@@ -19,8 +19,8 @@
 #define _LOG4CXX_HELPERS_SOCKET_OUTPUT_STREAM_H
 
 #include <log4cxx/logstring.h>
-#include <log4cxx/helpers/objectimpl.h>
-#include <log4cxx/helpers/objectptr.h>
+#include <log4cxx/helpers/outputstream.h>
+#include <vector>
 
 namespace log4cxx
 {
@@ -29,69 +29,27 @@
                 class Socket;
                 typedef ObjectPtrT<Socket> SocketPtr;
 
-                class SocketOutputStream;
-                typedef ObjectPtrT<SocketOutputStream> SocketOutputStreamPtr;
 
-                class LOG4CXX_EXPORT SocketOutputStream : public ObjectImpl
+                class LOG4CXX_EXPORT SocketOutputStream : public OutputStream
                 {
                 public:
                         DECLARE_ABSTRACT_LOG4CXX_OBJECT(SocketOutputStream)
                         BEGIN_LOG4CXX_CAST_MAP()
                                 LOG4CXX_CAST_ENTRY(SocketOutputStream)
+                                LOG4CXX_CAST_ENTRY_CHAIN(OutputStream)
                         END_LOG4CXX_CAST_MAP()
 
-                        SocketOutputStream(SocketPtr socket);
+                        SocketOutputStream(const SocketPtr& socket);
                         ~SocketOutputStream();
 
-                        void write(const void * buffer, size_t len);
-                        void write(unsigned int value);
-                        void write(int value);
-                        void write(unsigned long value);
-                        void write(long value);
-
-                        /**
-                         * Writes a LogString to a socket.
-                         * The length of the string is written as the first
-                         * two bytes to allow proper deserialization on the
-                         * client side.
-                         */
-                        void write(const LogString& value);
-
-                        /**
-                         * Writes a LogString to a socket.
-                         * Only the contents of the String itself are written,
-                         * no length byte is passed to the client. This is 
-                         * usefull when the client does not need to properly
-                         * deserialize the String, such as raw telnet clients.
-                         */
-                        void writeRaw(const LogString& value);
-
-                        // some write functions are missing ...
-
-                        /** Close the stream and dereference the socket.
-                        */
-                        void close();
-
-                        /** Flushes this output stream and forces any buffered output
-                        bytes to be written out.
-                        */
-                        void flush();
+                        virtual void close(Pool& p);
+                        virtual void flush(Pool& p);
+                        virtual void write(ByteBuffer& buf, Pool& p);
 
                 protected:
+                        std::vector<unsigned char> array;
                         SocketPtr socket;
 
-                        /** memory stream buffer */
-/*       class membuf :
-                                public std::basic_streambuf<char, std::char_traits<char> >
-                        {
-                        public:
-                                const void * buffer() const;
-                                const size_t size() const;
-                        }*/
-
-                        unsigned char * beg, * cur, * end;
-
-
                 private:
                        //
                        //   prevent copy and assignment statements
@@ -99,6 +57,9 @@
                        SocketOutputStream& operator=(const SocketOutputStream&);
 
                 };
+                
+                typedef ObjectPtrT<SocketOutputStream> SocketOutputStreamPtr;
+                
         }  // namespace helpers
 } // namespace log4cxx
 

Modified: logging/log4cxx/trunk/src/main/include/log4cxx/net/socketappender.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/net/socketappender.h?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/net/socketappender.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/net/socketappender.h Fri Nov 30 19:32:04 2007
@@ -22,10 +22,12 @@
 
 namespace log4cxx
 {
+        namespace helpers {
+                class ObjectOutputStream;
+                typedef ObjectPtrT<ObjectOutputStream> ObjectOutputStreamPtr;
+        }
         namespace net
         {
-                class LOG4CXX_EXPORT SocketAppender;
-                typedef helpers::ObjectPtrT<SocketAppender> SocketAppenderPtr;
 
         /**
         Sends {@link spi::LoggingEvent LoggingEvent} objects to a remote a log server,
@@ -99,14 +101,14 @@
                 */
                 static int DEFAULT_RECONNECTION_DELAY;
 
-                        DECLARE_LOG4CXX_OBJECT(SocketAppender)
-                        BEGIN_LOG4CXX_CAST_MAP()
-                                LOG4CXX_CAST_ENTRY(SocketAppender)
-                                LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton)
-                        END_LOG4CXX_CAST_MAP()
+                DECLARE_LOG4CXX_OBJECT(SocketAppender)
+                BEGIN_LOG4CXX_CAST_MAP()
+                        LOG4CXX_CAST_ENTRY(SocketAppender)
+                        LOG4CXX_CAST_ENTRY_CHAIN(AppenderSkeleton)
+                END_LOG4CXX_CAST_MAP()
 
                 SocketAppender();
-                        ~SocketAppender();
+                ~SocketAppender();
 
                 /**
                 Connects to remote server at <code>address</code> and <code>port</code>.
@@ -119,30 +121,24 @@
                 SocketAppender(const LogString& host, int port);
 
 
-                        /**
-                     *Set options
-                     */
-                        virtual void setOption(const LogString& option,
-                                const LogString& value) {
-                                SocketAppenderSkeleton::setOption(option, value, DEFAULT_PORT, DEFAULT_RECONNECTION_DELAY);
-                        }
-
-
-                /**
-                * The SocketAppender does not use a layout. Hence, this method
-                * returns <code>false</code>.
-                * */
-                bool requiresLayout() const
-                        { return false; }
-
-                protected:
-                        virtual void renderEvent(const spi::LoggingEventPtr& event,
-                                const helpers::OutputStreamPtr& os,
-                                log4cxx::helpers::Pool& p);
+        protected:
+                virtual void setSocket(log4cxx::helpers::SocketPtr& socket, log4cxx::helpers::Pool& p);
+                
+                virtual void cleanUp(log4cxx::helpers::Pool& p);
+                
+                virtual int getDefaultDelay() const;
+                
+                virtual int getDefaultPort() const;
 
+                void append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& pool);
 
+        private:
+                log4cxx::helpers::ObjectOutputStreamPtr oos;
 
         }; // class SocketAppender
+        
+        typedef helpers::ObjectPtrT<SocketAppender> SocketAppenderPtr;
+        
     } // namespace net
 } // namespace log4cxx
 

Modified: logging/log4cxx/trunk/src/main/include/log4cxx/net/socketappenderskeleton.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/net/socketappenderskeleton.h?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/net/socketappenderskeleton.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/net/socketappenderskeleton.h Fri Nov 30 19:32:04 2007
@@ -51,7 +51,6 @@
                 helpers::InetAddressPtr address;
 
                 int port;
-                helpers::SocketPtr socket;
                 int reconnectionDelay;
                 bool locationInfo;
 
@@ -73,23 +72,9 @@
                 Connect to the specified <b>RemoteHost</b> and <b>Port</b>.
                 */
                 void activateOptions(log4cxx::helpers::Pool& p);
-
-
-                /**
-                * Close this appender.
-                *
-                * <p>This will mark the appender as closed and call then
-                * #cleanUp method.
-                * */
+                
                 void close();
 
-                /**
-                * Drop the connection to the remote host and release the underlying
-                * connector thread if it has been created
-                * */
-                void cleanUp();
-
-                void connect();
 
                    /**
                 * This appender does not use a layout. Hence, this method
@@ -99,10 +84,6 @@
                 bool requiresLayout() const
                         { return false; }
 
-
-                                void append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& p);
-
-
                 /**
                 * The <b>RemoteHost</b> option takes a string value which should be
                 * the host name of the server where a
@@ -163,20 +144,23 @@
                 int getReconnectionDelay() const
                         { return reconnectionDelay; }
 
-                    void fireConnector();
+                void fireConnector();
+
+                void setOption(const LogString& option,
+                                const LogString& value);
 
            protected:
-                    /**
-                    Set options
-                    */
-                        void setOption(const LogString& option,
-                                const LogString& value, int defaultPort, int defaultDelay);
-
-                        virtual void renderEvent(const spi::LoggingEventPtr& event,
-                                const helpers::OutputStreamPtr& os,
-                                log4cxx::helpers::Pool& p) = 0;
 
-       private:
+                virtual void setSocket(log4cxx::helpers::SocketPtr& socket, log4cxx::helpers::Pool& p) = 0;
+                
+                virtual void cleanUp(log4cxx::helpers::Pool& p) = 0;
+                
+                virtual int getDefaultDelay() const = 0;
+                
+                virtual int getDefaultPort() const = 0;
+
+           private:
+                void connect(log4cxx::helpers::Pool& p);
                    /**
                         The Connector will reconnect when the server becomes available
                         again.  It does this by attempting to open a new connection every

Modified: logging/log4cxx/trunk/src/main/include/log4cxx/net/sockethubappender.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/net/sockethubappender.h?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/net/sockethubappender.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/net/sockethubappender.h Fri Nov 30 19:32:04 2007
@@ -19,14 +19,16 @@
 #define _LOG4CXX_NET_SOCKET_HUB_APPENDER_H
 
 #include <log4cxx/appenderskeleton.h>
-#include <log4cxx/helpers/socket.h>
-#include <log4cxx/helpers/thread.h>
-#include <log4cxx/helpers/mutex.h>
 #include <vector>
+#include <log4cxx/helpers/thread.h>
 
 
 namespace log4cxx
 {
+        namespace helpers {
+                class ObjectOutputStream;
+                typedef ObjectPtrT<ObjectOutputStream> ObjectOutputStreamPtr;
+        }
         namespace net
         {
                 /**
@@ -103,7 +105,7 @@
                         static int DEFAULT_PORT;
 
                         int port;
-                        std::vector<helpers::SocketPtr> sockets;
+                        std::vector<helpers::ObjectOutputStreamPtr> streams;
                         bool locationInfo;
 
                 public:
@@ -180,6 +182,7 @@
                         static void* LOG4CXX_THREAD_FUNC monitor(helpers::log4cxx_thread_t* thread, void* data);
 
                 }; // class SocketHubAppender
+                typedef helpers::ObjectPtrT<SocketHubAppender> SocketHubAppenderPtr;
         }  // namespace net
 } // namespace log4cxx
 

Modified: logging/log4cxx/trunk/src/main/include/log4cxx/net/xmlsocketappender.h
URL: http://svn.apache.org/viewvc/logging/log4cxx/trunk/src/main/include/log4cxx/net/xmlsocketappender.h?rev=600045&r1=600044&r2=600045&view=diff
==============================================================================
--- logging/log4cxx/trunk/src/main/include/log4cxx/net/xmlsocketappender.h (original)
+++ logging/log4cxx/trunk/src/main/include/log4cxx/net/xmlsocketappender.h Fri Nov 30 19:32:04 2007
@@ -23,8 +23,8 @@
 namespace log4cxx
 {
         namespace helpers {
-                class CharsetEncoder;
-                typedef helpers::ObjectPtrT<CharsetEncoder> CharsetEncoderPtr;
+                class Writer;
+                typedef helpers::ObjectPtrT<Writer> WriterPtr;
         }
         namespace net
         {
@@ -101,8 +101,6 @@
                 */
                 static int DEFAULT_RECONNECTION_DELAY;
 
-                bool locationInfo;
-
                 /**
                 An event XML stream cannot exceed 1024 bytes.
                 */
@@ -128,42 +126,22 @@
                 XMLSocketAppender(const LogString& host, int port);
 
 
-                /**
-                 *Set options
-                 */
-                virtual void setOption(const LogString& option,
-                      const LogString& value);
-
-
-                /**
-                The <b>LocationInfo</b> option takes a boolean value. If true,
-                the information sent to the remote host will include location
-                information. By default no location information is sent to the server.
-                */
-                void setLocationInfo(bool locationInfo);
-
-                /**
-                Returns value of the <b>LocationInfo</b> option.
-                */
-                bool getLocationInfo() const
-                        { return locationInfo; }
-
       protected:
-                void renderEvent(const spi::LoggingEventPtr& event,
-                    const helpers::OutputStreamPtr& os, 
-                    log4cxx::helpers::Pool& p);
-
+                virtual void setSocket(log4cxx::helpers::SocketPtr& socket, log4cxx::helpers::Pool& p);
+                
+                virtual void cleanUp(log4cxx::helpers::Pool& p);
+                
+                virtual int getDefaultDelay() const;
+                
+                virtual int getDefaultPort() const;
 
+                void append(const spi::LoggingEventPtr& event, log4cxx::helpers::Pool& pool);
 
        private:
+                log4cxx::helpers::WriterPtr writer;
                 //  prevent copy and assignment statements
                 XMLSocketAppender(const XMLSocketAppender&);
                 XMLSocketAppender& operator=(const XMLSocketAppender&);
-                
-#if !LOG4CXX_LOGCHAR_IS_UTF8
-                log4cxx::helpers::CharsetEncoderPtr utf8Encoder;
-#endif                
-
         }; // class XMLSocketAppender
         
         typedef helpers::ObjectPtrT<XMLSocketAppender> XMLSocketAppenderPtr;