I have defined a very simple SocketAppender to a log4J 1.2.8 client
application
log4j.appender.SockLog=org.apache.log4j.net.SocketAppender
log4j.appender.SockLog.RemoteHost=localhost
log4j.appender.SockLog.Port=4451
#log4j.appender.SockLog.LocationInfo=true
log4j.appender.SockLog.Threshold=WARN
A very simple SocketReceiver is configured for the "listener" server
<plugin name="Log4JSocketReceiver"
class="org.apache.log4j.net.SocketReceiver">
<param name="Port" value="4451"/>
</plugin>
1) I have read about a bug in log4J 1.3 that prevents the LocationInfo
propertery being set to true.
When will this be fixed ? I need the location info for remote
debugging
2) When I have the listener server down and run the client application, I
expect only a "couldn't connect" terse error message.
Instead I get the full java.net.ConnectException + stack trace .
Not exactly simply dropped.
Note this is from the initialization code, not subsequent
loggings.
Is there anyway to avoid this message. I want the application to
use the socket if it is available, else ignore it.
(Note that log4perl handles this very situation very cleanly)
The log4J javadoc for socketappender states :
"If the remote server is down, the logging requests are simply dropped.
However, if and when the server comes back up, then event transmission is
resumed transparently. This transparent reconneciton is performed by a
connector thread which periodically attempts to connect to the server."
log4j:ERROR Could not connect to remote log4j server at [localhost]. We
will try again later.
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
at
java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:158)
at java.net.Socket.connect(Socket.java:452)
at java.net.Socket.connect(Socket.java:402)
at java.net.Socket.<init>(Socket.java:309)
at java.net.Socket.<init>(Socket.java:153)
at
org.apache.log4j.net.SocketAppender.connect(SocketAppender.java:195)
at
org.apache.log4j.net.SocketAppender.activateOptions(SocketAppender.java:152)
at
org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:247)
at
org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:123)
at
org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:87)
at
org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:645)
at
org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:603)
at
org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:500)
at
org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:406)
at
org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:307)
at
org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:315)
at fvis.logging.FvisLog.getFvisLogger(FvisLog.java:56)
at fvis.logging.TestFvisLog.main(TestFvisLog.java:68)
bash-2.05$ java -Dfvis.home=/home/fvusmnd1/fvis fvis.logging.TestFvisLog
fvis.drpg.log4j.properties