logging-log4cxx-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Wilfong, Paul" <paul.wilf...@ngc.com>
Subject Segmentation Fault problem using XMLSocketAppender under Linux & Solaris
Date Thu, 06 Sep 2007 23:30:45 GMT
Hi,

I am getting a segmentation fault when trying to set up for output to a
XMLSocketAppender.

This problem does not occur using Windows.  But it does occur using both
Solaris (version 5) and Redhat Linux.  I am using log4cxx 0.10.0 which I
got from the overnight build web-site.

I used the autogen/configure/make/makeinstall approach to build.  I
first built and installed the apr stuff (apr 1.2.9 and apr-util 1.2.8).

Here is my properties file...
----------------------------------------------------------------
# Set DEBUG
log4j.debug=DEBUG
log4j.rootCategory=DEBUG, CONSOLE1, SOCKET1

# CONSOLE1
log4j.appender.CONSOLE1=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE1.layout=org.apache.log4j.TTCCLayout

# SOCKET1
# Writes to a port.  If another application is reading from the port, it
should see the
# log messages coming in.
log4j.appender.SOCKET1=org.apache.log4j.net.XMLSocketAppender
log4j.appender.SOCKET1.remoteHost=10.10.52.99
#log4j.appender.SOCKET1.remoteHost=127.0.0.1
log4j.appender.SOCKET1.port=7776
log4j.appender.SOCKET1.locationInfo=true
------------------------------------------------------------------

I did some investigation on the Solaris machine.  I added a debug line
in routine setProperty, after the setOption call, as follows:
------------------------------------------------------------------
void PropertySetter::setProperty(const LogString& option,
                                 const LogString& value,
                                 Pool&)
{
        if (value.empty())
                return;

        if (obj->instanceof(OptionHandler::getStaticClass()))
        {
                LogLog::debug(LOG4CXX_STR("Setting option name=[") +
                        option + LOG4CXX_STR("], value=[") + value +
LOG4CXX_STR("]"));
                OptionHandlerPtr(obj)->setOption(option, value);
LogLog::debug(LOG4CXX_STR("set option done, returning from
propertysetter...") ); //added this line...
        }
}
---------------------------------------------------------------------

If I set the remoteHost value to 10.10.52.99 (the IP of one of our PCs),
here is the output...
---------------------------------------------------------------------
...
log4cxx: Parsing for [root] with value=[DEBUG, CONSOLE1, SOCKET1].
log4cxx: Level token is [DEBUG].
log4cxx: OptionConverter::toLevel: no class name specified,
level=[DEBUG]
log4cxx: Logger root set to DEBUG
log4cxx: Parsing appender named
CONSOLE1".
log4cxx: Parsing layout options for "CONSOLE1".
log4cxx: End of parsing for "CONSOLE1".
log4cxx: Parsed "CONSOLE1" options.
log4cxx: Parsing appender named
SOCKET1".
log4cxx: Setting option name=[locationInfo], value=[true]
log4cxx: set option done, returning from propertysetter...
log4cxx: Setting option name=[port], value=[7776]
log4cxx: set option done, returning from propertysetter...
log4cxx: Setting option name=[remoteHost], value=[10.10.52.99]
Segmentation Fault (core dumped)
------------------------------------------------------------------------
----
So my debug line doesn't get executed after the remoteHost set.

If I set remoteHost in the properties file to 127.0.0.1 (localhost),
however, things work as I expect, as the following output shows...
------------------------------------------------------------------------
----
...
log4cxx: Parsing for [root] with value=[DEBUG, CONSOLE1, SOCKET1].
log4cxx: Level token is [DEBUG].
log4cxx: OptionConverter::toLevel: no class name specified,
level=[DEBUG]
log4cxx: Logger root set to DEBUG
log4cxx: Parsing appender named
CONSOLE1".
log4cxx: Parsing layout options for "CONSOLE1".
log4cxx: End of parsing for "CONSOLE1".
log4cxx: Parsed "CONSOLE1" options.
log4cxx: Parsing appender named
SOCKET1".
log4cxx: Setting option name=[locationInfo], value=[true]
log4cxx: set option done, returning from propertysetter...
log4cxx: Setting option name=[port], value=[7776]
log4cxx: set option done, returning from propertysetter...
log4cxx: Setting option name=[remoteHost], value=[127.0.0.1]
log4cxx: set option done, returning from propertysetter...
log4cxx: Entering Socketappenderskeleton   --- Note - This is another
debug line I added in one of the other log4cxx routines...
log4cxx: closing socket
log4cxx: Could not connect to remote log4cxx server at [localhost]. We
will try again later.
...
------------------------------------------------------------------------
-

I am going to try to drill down further but I am not a C++ expert so
putting debug into the setOption call is going to be harder for me to
figure out how to do.

Any advice would be appreciated.

Mime
View raw message