Hüseyin Kartal created LOG4J2-1200:
--------------------------------------

             Summary: Kill process with Socket Appender causes flood of 
Connection-Reset logs
                 Key: LOG4J2-1200
                 URL: https://issues.apache.org/jira/browse/LOG4J2-1200
             Project: Log4j 2
          Issue Type: Bug
          Components: Appenders, Core
    Affects Versions: 2.4.1
         Environment: win64 java8 osgi
            Reporter: Hüseyin Kartal


Hi,

we use primary the SocketAppender to send log messages to a server instance. 
The server instance is based on the TcpSocketServer and is started as follows:
h1. Server Context
h2. Startup
{code}
new TcpSocketServer<>(9500, new 
JsonInputStreamLogEventBridge()).startNewThread();
{code}
h2. Configuration
{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="0" strict="true" name="XMLConfig" 
status="error" shutdownHook="enable" 
xmlns="http://jakarta.apache.org/log4j2/config"; 
xmlns:events="http://jakarta.apache.org/log4j2/events"; 
xmlns:levels="http://jakarta.apache.org/log4j2/levels"; 
xmlns:xi="http://www.w3.org/2001/XInclude"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://jakarta.apache.org/log4j2/config Log4j-config.xsd 
http://jakarta.apache.org/log4j2/events Log4j-events.xsd 
http://jakarta.apache.org/log4j2/levels Log4j-levels.xsd">
        <xi:include href="log4j2-properties.xml" />
        <Appenders>
                <Appender type="Console" name="OUT">
                        <Layout Type="PatternLayout" 
Pattern="${sys:log.application}: ${pattern}" />
                </Appender>
                <Appender type="RollingRandomAccessFile" name="OUT-FILE" 
fileName="${file.name.out}${file.suffix}" 
filePattern="${file.name.out}-%2i${file.suffix}">
                        <Layout Type="PatternLayout" Pattern="${pattern}" />
                        <Policies>
                                <SizeBasedTriggeringPolicy 
size="${sizeBasedTriggeringPolicy.size}" />
                        </Policies>
                        <DefaultRolloverStrategy 
max="${defaultRolloverStrategy.max}" fileIndex="min" />
                </Appender>
                <Appender type="RollingRandomAccessFile" name="ERR-FILE" 
fileName="${file.name.err}${file.suffix}" 
filePattern="${file.name.err}-%2i${file.suffix}">
                        <Layout Type="PatternLayout" Pattern="${pattern}" />
                        <Policies>
                                <SizeBasedTriggeringPolicy 
size="${sizeBasedTriggeringPolicy.size}" />
                        </Policies>
                        <DefaultRolloverStrategy 
max="${defaultRolloverStrategy.max}" fileIndex="min" />
                </Appender>
                <Async name="ASYNC-OUT">
                        <AppenderRef ref="OUT" />
                </Async>
                <Async name="ASYNC-OUT-FILE">
                        <AppenderRef ref="OUT-FILE" />
                </Async>
        </Appenders>
        <Loggers>
                <asyncRoot level="all">
                        <AppenderRef ref="ASYNC-OUT" />
                        <AppenderRef ref="ASYNC-OUT-FILE" />
                </asyncRoot>
                <asyncLogger name="com" level="error" />
                <asyncLogger name="org" level="error" />
                <asyncLogger name="javax" level="error" />
        </Loggers>
</Configuration>
{code}
h1. Client context
h2. Configuration
{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="0" strict="true" name="XMLConfig" 
status="fatal" shutdownHook="enable" 
xmlns="http://jakarta.apache.org/log4j2/config"; 
xmlns:events="http://jakarta.apache.org/log4j2/events"; 
xmlns:levels="http://jakarta.apache.org/log4j2/levels"; 
xmlns:xi="http://www.w3.org/2001/XInclude"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xsi:schemaLocation="http://jakarta.apache.org/log4j2/config Log4j-config.xsd 
http://jakarta.apache.org/log4j2/events Log4j-events.xsd 
http://jakarta.apache.org/log4j2/levels Log4j-levels.xsd">
        <xi:include href="log4j2-properties.xml" />
        <Appenders>
                <Appender type="Socket" name="OUT-SOCKET" 
host="${sys:log.host}" port="${sys:log.port}" protocol="${sys:log.protocol}" 
ignoreExceptions="false">
                        <Layout type="JsonLayout" compact="true" 
eventEol="true" complete="true" properties="true" />
                </Appender>
                <Appender type="Failover" name="OUT-FAIL" primary="OUT-SOCKET">
                        <Failovers>
                                <Appender type="RollingRandomAccessFile" 
name="OUT-FILE" fileName="${file.name.tmp}${file.suffix}" 
filePattern="${file.name.tmp}-%2i${file.suffix}" ignoreExceptions="false">
                                        <Layout Type="PatternLayout" 
Pattern="${pattern.single}" />
                                        <Policies>
                                                <SizeBasedTriggeringPolicy 
size="${sizeBasedTriggeringPolicy.size}" />
                                        </Policies>
                                        <DefaultRolloverStrategy 
max="${defaultRolloverStrategy.max}" fileIndex="min" />
                                </Appender>
                        </Failovers>
                </Appender>
                <Async name="ASYNC-OUT-FAIL">
                        <AppenderRef ref="OUT-FAIL" />
                </Async>
        </Appenders>
        <Loggers>
                <asyncRoot level="all">
                        <AppenderRef ref="ASYNC-OUT-FAIL" />
                </asyncRoot>
                <asyncLogger name="com" level="error" />
                <asyncLogger name="org" level="error" />
                <asyncLogger name="javax" level="error" />
        </Loggers>
</Configuration>
{code}
h1. Test
h2. Code
{code}
public abstract class LogTest {
    public static void main(String... args) throws Exception {
        Logger logger = LogManager.getLogger();
        for (int i = 0; i < Integer.MAX_VALUE; i++) {
            logger.info(i);
        }
        System.exit(0);
    }
}
{code}
h2. Result
The client and server are started as different applications and uses seperate 
jvm. If the client terminates with system.exit everything is fine. But if the 
client is Terminiated by TaskKill or the jvm crashes. The server outputs 
multiple times the following trace.
{code}
2015-11-18 11:26:33,479 Thread-9 ERROR  java.net.SocketException: Connection 
reset
        at java.net.SocketInputStream.read(SocketInputStream.java:154)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at java.net.SocketInputStream.read(SocketInputStream.java:127)
        at 
org.apache.logging.log4j.core.net.server.InputStreamLogEventBridge.logEvents(InputStreamLogEventBridge.java:62)
        at 
org.apache.logging.log4j.core.net.server.TcpSocketServer$SocketHandler.run(TcpSocketServer.java:62)
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to