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 "saran sundar (JIRA)" <ji...@apache.org> on 2014/10/21 17:27:33 UTC

[jira] [Updated] (LOG4J2-878) Failover appender throws "Error flushing stream //L-Computer1/test/logs/primary.log" at the time of retry, but the location is up

     [ https://issues.apache.org/jira/browse/LOG4J2-878?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

saran sundar updated LOG4J2-878:
--------------------------------
    Description: 
OS: Windows
Software platform: j2ee, spring, webservices, junit, log4j2
I want to make sure that the failover configuration works as expected.
I configured failover appender with two rolling file appenders. Primary rolling file appender configured to a shared folder in different computer. Secondary file appender pointing to my local file system. Once after i ran the junit program and the first debug statement printed, i removed the share location from the other computer in the network for the primary appender. As expected next debug statements ( i left thread.sleep(30000) in between each debug statement in junit program) were redirect to secondary file appender. However at the time of retry by failover appender , it tries to reconnect to the primary location which is up now (enabled the share location in different computer), but received following error..

2014-10-21 10:34:11,463 ERROR Unable to write to stream //L-Computer1/test/logs/primary.log for appender primeCompressedDaily
2014-10-21 10:34:11,463 ERROR An exception occurred processing Appender primeCompressedDaily org.apache.logging.log4j.core.appender.AppenderLoggingException: Error flushing stream //L-Computer1/test/logs/primary.log
	at org.apache.logging.log4j.core.appender.OutputStreamManager.flush(OutputStreamManager.java:159)
	at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:108)
	at org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:86)
	at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:97)
	at org.apache.logging.log4j.core.appender.FailoverAppender.callAppender(FailoverAppender.java:117)
	at org.apache.logging.log4j.core.appender.FailoverAppender.append(FailoverAppender.java:109)
	at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:97)
	at org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.callAppenders(AsyncAppender.java:288)
	at org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.run(AsyncAppender.java:240)
Caused by: java.io.IOException: The specified network name is no longer available
	at java.io.FileOutputStream.writeBytes(Native Method)
	at java.io.FileOutputStream.write(FileOutputStream.java:318)
	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
	at org.apache.logging.log4j.core.appender.OutputStreamManager.flush(OutputStreamManager.java:156)
	... 8 more

2014-10-21 10:39:31,484 ERROR Unable to write to stream //L-Computer1/test/logs/primary.log for appender primeCompressedDaily

log4j2.xml entries is given below,

<?xml version="1.0" encoding="UTF-8"?>
<!-- set status below to FATAL to suppress a bug in log4j2: "ERROR appender Failover has no parameter that matches element Failovers" -->
<!--  other working value for status is "warn" -  -->
<Configuration status="warn" name="log4j2" packages="com.ims.log4j">
	<Appenders>
	
		<Console name="stdout" target="SYSTEM_OUT" ignoreExceptions="false">
			<PatternLayout pattern="%d{ABSOLUTE} %1p %X{userinfo} %c{1}:%L - %m%n"/>
		</Console>
				
		<RollingFile name="compressedDaily" fileName="c:/installed/Tomcat-7.0.12/logs/secondary.log"
			filePattern="c:/installed/Tomcat-7.0.12/logs/secondary.log.%d{yyyy-MM-dd}.gz" ignoreExceptions="false">
			<PatternLayout>
				<Pattern>%d{ABSOLUTE} %1p %X{userinfo} %c{1}:%L - %m%n</Pattern>
			</PatternLayout>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy/>
			</Policies>
		</RollingFile>
		
		<RollingFile name="primeCompressedDaily" fileName="//L-Computer1/test/logs/primary.log"
			filePattern="//L-Computer1/test/logs/primary.log.%d{yyyy-MM-dd}.gz" ignoreExceptions="false" >
			<PatternLayout>
				<Pattern>%d{ABSOLUTE} %1p %X{userinfo} %c{1}:%L - %m%n</Pattern>
			</PatternLayout>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy/>
			</Policies>
		</RollingFile>
		
		<Failover name="FailoverAppender" primary="primeCompressedDaily" retryInterval="61" ignoreExceptions="false"> 
	      	<Failovers>
	      		<AppenderRef ref="compressedDaily" />
	      	</Failovers>
	    </Failover>
	    
	    <Async name="asyncCompressed">
		<AppenderRef ref="FailoverAppender" />
	    </Async>

            <Async name="asyncStdout">
		<AppenderRef ref="stdout" />
	    </Async>
        
	</Appenders>
	  	 	
 	<Loggers>
 	
 		<Root level="trace">
      		<AppenderRef ref="asyncCompressed" level="trace"/>
      		<AppenderRef ref="asyncStdout" level="trace"/>
    	</Root>
 	
	    <Logger name="com.ims" level="debug" includeLocation="true" additivity="false">
	      <AppenderRef ref="asyncCompressed"/>
	    </Logger>
	    
	    <Logger name="org.apache.cxf.interceptor.LoggingInInterceptor" level="info" includeLocation="true" additivity="false">
	      <AppenderRef ref="asyncCompressed"/>
	    </Logger>
	    
	    <Logger name="org.apache.cxf.interceptor.LoggingOutInterceptor" level="info" includeLocation="true" additivity="false">
	      <AppenderRef ref="asyncCompressed"/>
	    </Logger>
 	
 		<Logger name="org.hibernate" level="error" includeLocation="true" additivity="false">
	      <AppenderRef ref="asyncCompressed"/>
	    </Logger>
 	
	    <Logger name="test.escalation" level="debug" includeLocation="true" additivity="false">
	      <AppenderRef ref="asyncCompressed"/>
	    </Logger>
	    
 	    <Logger name="org.apache.cxf" level="info" includeLocation="true" additivity="false">
	      <AppenderRef ref="asyncCompressed"/>
	    </Logger> 		
    	
 	</Loggers>	
	
</Configuration>

Junit method
@Test
	public void log4jTest() throws Exception {

		System.out.println("log4j2 test");
		Thread.sleep(30000);
		log.error("debug-log4j2 test*1");
		Thread.sleep(60000);
		log.error("debug-log4j2 test*2");
		Thread.sleep(30000);
		System.out.println("debug-log4j2 test*3");
		Thread.sleep(70000);
		log.info("debug-log4j2 test*4");
		Thread.sleep(30000);
		log.debug("debug-log4j2 test*5");
		Thread.sleep(30000);
		log.debug("debug-log4j2 test*6");
		Thread.sleep(30000);
		log.debug("debug-log4j2 test*7");
		Thread.sleep(30000);
		log.debug("debug-log4j2 test*8");
		Thread.sleep(290000);
		log.debug("debug-log4j2 test*9");
		Thread.sleep(30000);
		log.debug("debug-log4j2 test*10");
		System.out.println("debug-log4j2 test*6");

	}

PS Please forgive if I wasn't narrate the problem properly. any quick help in this issue would be highly appreciated.


  was:
OS: Windows
Software platform: j2ee, spring, webservices, junit, log4j2
I want to make sure that the failover configuration works as expected.
I configured failover appender with two rolling file appenders. Primary rolling file appender configured to a shared folder in different computer. Secondary file appender pointing to my local file system. Once after i ran the junit program and the first debug statement printed, i removed the share location from the other computer in the network for the primary appender. As expected next debug statements ( i left thread.sleep(30000) in between each debug statement in junit program) were redirect to secondary file appender. However at the time of retry by failover appender , it tries to reconnect to the primary location which is up now (enabled the share location in different computer), but received following error..

2014-10-21 10:34:11,463 ERROR Unable to write to stream //L-Computer1/test/logs/primary.log for appender primeCompressedDaily
2014-10-21 10:34:11,463 ERROR An exception occurred processing Appender primeCompressedDaily org.apache.logging.log4j.core.appender.AppenderLoggingException: Error flushing stream //L-Computer1/test/logs/primary.log
	at org.apache.logging.log4j.core.appender.OutputStreamManager.flush(OutputStreamManager.java:159)
	at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:108)
	at org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:86)
	at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:97)
	at org.apache.logging.log4j.core.appender.FailoverAppender.callAppender(FailoverAppender.java:117)
	at org.apache.logging.log4j.core.appender.FailoverAppender.append(FailoverAppender.java:109)
	at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:97)
	at org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.callAppenders(AsyncAppender.java:288)
	at org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.run(AsyncAppender.java:240)
Caused by: java.io.IOException: The specified network name is no longer available
	at java.io.FileOutputStream.writeBytes(Native Method)
	at java.io.FileOutputStream.write(FileOutputStream.java:318)
	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
	at org.apache.logging.log4j.core.appender.OutputStreamManager.flush(OutputStreamManager.java:156)
	... 8 more

2014-10-21 10:39:31,484 ERROR Unable to write to stream //L-Computer1/test/logs/primary.log for appender primeCompressedDaily

log4j2.xml entries is given below,

<?xml version="1.0" encoding="UTF-8"?>
<!-- set status below to FATAL to suppress a bug in log4j2: "ERROR appender Failover has no parameter that matches element Failovers" -->
<!--  other working value for status is "warn" -  -->
<Configuration status="warn" name="log4j2" packages="com.ims.log4j">
	<Appenders>
	
		<Console name="stdout" target="SYSTEM_OUT" ignoreExceptions="false">
			<PatternLayout pattern="%d{ABSOLUTE} %1p %X{userinfo} %c{1}:%L - %m%n"/>
		</Console>
				
		<RollingFile name="compressedDaily" fileName="c:/installed/Tomcat-7.0.12/logs/secondary.log"
			filePattern="c:/installed/Tomcat-7.0.12/logs/secondary.log.%d{yyyy-MM-dd}.gz" ignoreExceptions="false">
			<PatternLayout>
				<Pattern>%d{ABSOLUTE} %1p %X{userinfo} %c{1}:%L - %m%n</Pattern>
			</PatternLayout>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy/>
			</Policies>
		</RollingFile>
		
		<RollingFile name="primeCompressedDaily" fileName="//L-Computer1/test/logs/primary.log"
			filePattern="//L-Computer1/test/logs/primary.log.%d{yyyy-MM-dd}.gz" ignoreExceptions="false" >
			<PatternLayout>
				<Pattern>%d{ABSOLUTE} %1p %X{userinfo} %c{1}:%L - %m%n</Pattern>
			</PatternLayout>
			<Policies>
				<TimeBasedTriggeringPolicy/>
				<SizeBasedTriggeringPolicy/>
			</Policies>
		</RollingFile>
		
		<Failover name="FailoverAppender" primary="primeCompressedDaily" retryInterval="61" ignoreExceptions="false"> 
	      	<Failovers>
	      		<AppenderRef ref="compressedDaily" />
	      	</Failovers>
	    </Failover>
	    
	    <Async name="asyncCompressed">
		<AppenderRef ref="FailoverAppender" />
	    </Async>

            <Async name="asyncStdout">
		<AppenderRef ref="stdout" />
	    </Async>
        
	</Appenders>
	  	 	
 	<Loggers>
 	
 		<Root level="trace">
      		<AppenderRef ref="asyncCompressed" level="trace"/>
      		<AppenderRef ref="asyncStdout" level="trace"/>
    	</Root>
 	
	    <Logger name="com.ims" level="debug" includeLocation="true" additivity="false">
	      <AppenderRef ref="asyncCompressed"/>
	    </Logger>
	    
	    <Logger name="org.apache.cxf.interceptor.LoggingInInterceptor" level="info" includeLocation="true" additivity="false">
	      <AppenderRef ref="asyncCompressed"/>
	    </Logger>
	    
	    <Logger name="org.apache.cxf.interceptor.LoggingOutInterceptor" level="info" includeLocation="true" additivity="false">
	      <AppenderRef ref="asyncCompressed"/>
	    </Logger>
 	
 		<Logger name="org.hibernate" level="error" includeLocation="true" additivity="false">
	      <AppenderRef ref="asyncCompressed"/>
	    </Logger>
 	
	    <Logger name="epraxis.escalation" level="debug" includeLocation="true" additivity="false">
	      <AppenderRef ref="asyncCompressed"/>
	    </Logger>
	    
 	    <Logger name="org.apache.cxf" level="info" includeLocation="true" additivity="false">
	      <AppenderRef ref="asyncCompressed"/>
	    </Logger> 		
    	
 	</Loggers>	
	
</Configuration>

Junit method
@Test
	public void log4jTest() throws Exception {

		System.out.println("log4j2 test");
		Thread.sleep(30000);
		log.error("debug-log4j2 test*1");
		Thread.sleep(60000);
		log.error("debug-log4j2 test*2");
		Thread.sleep(30000);
		System.out.println("debug-log4j2 test*3");
		Thread.sleep(70000);
		log.info("debug-log4j2 test*4");
		Thread.sleep(30000);
		log.debug("debug-log4j2 test*5");
		Thread.sleep(30000);
		log.debug("debug-log4j2 test*6");
		Thread.sleep(30000);
		log.debug("debug-log4j2 test*7");
		Thread.sleep(30000);
		log.debug("debug-log4j2 test*8");
		Thread.sleep(290000);
		log.debug("debug-log4j2 test*9");
		Thread.sleep(30000);
		log.debug("debug-log4j2 test*10");
		System.out.println("debug-log4j2 test*6");

	}

PS Please forgive if I wasn't narrate the problem properly. any quick help in this issue would be highly appreciated.



> Failover appender throws "Error flushing stream //L-Computer1/test/logs/primary.log" at the time of retry, but the location is up
> ---------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: LOG4J2-878
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-878
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Appenders
>    Affects Versions: 2.0.2
>         Environment: development and will be moved to production in a weeks time.
>            Reporter: saran sundar
>            Priority: Critical
>              Labels: test
>   Original Estimate: 96h
>  Remaining Estimate: 96h
>
> OS: Windows
> Software platform: j2ee, spring, webservices, junit, log4j2
> I want to make sure that the failover configuration works as expected.
> I configured failover appender with two rolling file appenders. Primary rolling file appender configured to a shared folder in different computer. Secondary file appender pointing to my local file system. Once after i ran the junit program and the first debug statement printed, i removed the share location from the other computer in the network for the primary appender. As expected next debug statements ( i left thread.sleep(30000) in between each debug statement in junit program) were redirect to secondary file appender. However at the time of retry by failover appender , it tries to reconnect to the primary location which is up now (enabled the share location in different computer), but received following error..
> 2014-10-21 10:34:11,463 ERROR Unable to write to stream //L-Computer1/test/logs/primary.log for appender primeCompressedDaily
> 2014-10-21 10:34:11,463 ERROR An exception occurred processing Appender primeCompressedDaily org.apache.logging.log4j.core.appender.AppenderLoggingException: Error flushing stream //L-Computer1/test/logs/primary.log
> 	at org.apache.logging.log4j.core.appender.OutputStreamManager.flush(OutputStreamManager.java:159)
> 	at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:108)
> 	at org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:86)
> 	at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:97)
> 	at org.apache.logging.log4j.core.appender.FailoverAppender.callAppender(FailoverAppender.java:117)
> 	at org.apache.logging.log4j.core.appender.FailoverAppender.append(FailoverAppender.java:109)
> 	at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:97)
> 	at org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.callAppenders(AsyncAppender.java:288)
> 	at org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.run(AsyncAppender.java:240)
> Caused by: java.io.IOException: The specified network name is no longer available
> 	at java.io.FileOutputStream.writeBytes(Native Method)
> 	at java.io.FileOutputStream.write(FileOutputStream.java:318)
> 	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
> 	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
> 	at org.apache.logging.log4j.core.appender.OutputStreamManager.flush(OutputStreamManager.java:156)
> 	... 8 more
> 2014-10-21 10:39:31,484 ERROR Unable to write to stream //L-Computer1/test/logs/primary.log for appender primeCompressedDaily
> log4j2.xml entries is given below,
> <?xml version="1.0" encoding="UTF-8"?>
> <!-- set status below to FATAL to suppress a bug in log4j2: "ERROR appender Failover has no parameter that matches element Failovers" -->
> <!--  other working value for status is "warn" -  -->
> <Configuration status="warn" name="log4j2" packages="com.ims.log4j">
> 	<Appenders>
> 	
> 		<Console name="stdout" target="SYSTEM_OUT" ignoreExceptions="false">
> 			<PatternLayout pattern="%d{ABSOLUTE} %1p %X{userinfo} %c{1}:%L - %m%n"/>
> 		</Console>
> 				
> 		<RollingFile name="compressedDaily" fileName="c:/installed/Tomcat-7.0.12/logs/secondary.log"
> 			filePattern="c:/installed/Tomcat-7.0.12/logs/secondary.log.%d{yyyy-MM-dd}.gz" ignoreExceptions="false">
> 			<PatternLayout>
> 				<Pattern>%d{ABSOLUTE} %1p %X{userinfo} %c{1}:%L - %m%n</Pattern>
> 			</PatternLayout>
> 			<Policies>
> 				<TimeBasedTriggeringPolicy/>
> 				<SizeBasedTriggeringPolicy/>
> 			</Policies>
> 		</RollingFile>
> 		
> 		<RollingFile name="primeCompressedDaily" fileName="//L-Computer1/test/logs/primary.log"
> 			filePattern="//L-Computer1/test/logs/primary.log.%d{yyyy-MM-dd}.gz" ignoreExceptions="false" >
> 			<PatternLayout>
> 				<Pattern>%d{ABSOLUTE} %1p %X{userinfo} %c{1}:%L - %m%n</Pattern>
> 			</PatternLayout>
> 			<Policies>
> 				<TimeBasedTriggeringPolicy/>
> 				<SizeBasedTriggeringPolicy/>
> 			</Policies>
> 		</RollingFile>
> 		
> 		<Failover name="FailoverAppender" primary="primeCompressedDaily" retryInterval="61" ignoreExceptions="false"> 
> 	      	<Failovers>
> 	      		<AppenderRef ref="compressedDaily" />
> 	      	</Failovers>
> 	    </Failover>
> 	    
> 	    <Async name="asyncCompressed">
> 		<AppenderRef ref="FailoverAppender" />
> 	    </Async>
>             <Async name="asyncStdout">
> 		<AppenderRef ref="stdout" />
> 	    </Async>
>         
> 	</Appenders>
> 	  	 	
>  	<Loggers>
>  	
>  		<Root level="trace">
>       		<AppenderRef ref="asyncCompressed" level="trace"/>
>       		<AppenderRef ref="asyncStdout" level="trace"/>
>     	</Root>
>  	
> 	    <Logger name="com.ims" level="debug" includeLocation="true" additivity="false">
> 	      <AppenderRef ref="asyncCompressed"/>
> 	    </Logger>
> 	    
> 	    <Logger name="org.apache.cxf.interceptor.LoggingInInterceptor" level="info" includeLocation="true" additivity="false">
> 	      <AppenderRef ref="asyncCompressed"/>
> 	    </Logger>
> 	    
> 	    <Logger name="org.apache.cxf.interceptor.LoggingOutInterceptor" level="info" includeLocation="true" additivity="false">
> 	      <AppenderRef ref="asyncCompressed"/>
> 	    </Logger>
>  	
>  		<Logger name="org.hibernate" level="error" includeLocation="true" additivity="false">
> 	      <AppenderRef ref="asyncCompressed"/>
> 	    </Logger>
>  	
> 	    <Logger name="test.escalation" level="debug" includeLocation="true" additivity="false">
> 	      <AppenderRef ref="asyncCompressed"/>
> 	    </Logger>
> 	    
>  	    <Logger name="org.apache.cxf" level="info" includeLocation="true" additivity="false">
> 	      <AppenderRef ref="asyncCompressed"/>
> 	    </Logger> 		
>     	
>  	</Loggers>	
> 	
> </Configuration>
> Junit method
> @Test
> 	public void log4jTest() throws Exception {
> 		System.out.println("log4j2 test");
> 		Thread.sleep(30000);
> 		log.error("debug-log4j2 test*1");
> 		Thread.sleep(60000);
> 		log.error("debug-log4j2 test*2");
> 		Thread.sleep(30000);
> 		System.out.println("debug-log4j2 test*3");
> 		Thread.sleep(70000);
> 		log.info("debug-log4j2 test*4");
> 		Thread.sleep(30000);
> 		log.debug("debug-log4j2 test*5");
> 		Thread.sleep(30000);
> 		log.debug("debug-log4j2 test*6");
> 		Thread.sleep(30000);
> 		log.debug("debug-log4j2 test*7");
> 		Thread.sleep(30000);
> 		log.debug("debug-log4j2 test*8");
> 		Thread.sleep(290000);
> 		log.debug("debug-log4j2 test*9");
> 		Thread.sleep(30000);
> 		log.debug("debug-log4j2 test*10");
> 		System.out.println("debug-log4j2 test*6");
> 	}
> PS Please forgive if I wasn't narrate the problem properly. any quick help in this issue would be highly appreciated.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org