You mention that RollingRandomAccessFile appender with immediateFlush=false and a buffer size of 256K did not flush to disk until you logged 600KB. Looking at the code I don't see how this is possible but you may have found a bug. Is this reproducible? If so, can you raise a Jira with a small test program that reproduces the issue?
Continuing our discussion about workarounds: You can use either appender. The performance numbers (random access file appender being 1.3 - 2 times faster than file appender) are for immediateFlush=false. I don't have numbers for immediateFlush=true. There's a separate attribute for setting the buffer size (for both appenders). Perhaps a smaller buffer size would flush sooner, have you experimented with that? Remko Sent from my iPhone > On 2016/02/04, at 0:06, Veit Guna <[email protected]> wrote: > > So, If I would like to use a rolling file appender with synchronous logging, > but _with_ buffering and so _not_ flushing on every event what should > I use? RollingRandomAccessFile with immediateFlush="true" or the "normal" > RollingFileAppender :)? Does immediateFlush="true" take the buffer into > account? > > Thanks > Veit > > > Gesendet: Mittwoch, 03. Februar 2016 um 13:43 Uhr > Von: "Remko Popma" <[email protected]> > An: "Log4J Users List" <[email protected]> > Betreff: Re: Aw: Re: RollingRandomAccessFile and emtpy log file > Sorry my message was unclear. > > RollingRandomAccessFile appender does not _need_ async loggers, it's just > that if you choose to use async loggers, you will get the side-effect of > regular flushing in the background. So it achieves your goal (of flushing the > buffer to disk.) > > You can also set immediateFlush to true to achieve this, but this will write > to disk on _every_ event *in your application thread*. > > If performance is important, async logging is 10-20 times faster than > synchronous logging. The difference between the normal file appender and > random access file is much smaller (random access file appender is only 1.3 - > 2 times faster than file appender). > > :-) > > Sent from my iPhone > >> On 2016/02/03, at 21:01, Veit Guna <[email protected]> wrote: >> >> immediateFlush="true" seems to work - without adding async config options. >> Adding the system property does also work, but needs disruptor.jar on >> the classpath - as it seems. Otherwise a ClassNotFoundException occurs. >> Although the documentation states, that the RandomAccessFile appenders do >> _not_ need the disruptor.jar ;). >> >> Ok then. Since I don't want to add an additional dependency, I would go for >> immediateFlush="true". But now I'm wondering whether it would be better to >> just use the normal RollingFileAppender with not specifying flush behavior >> at all. Which one is faster in synchronous mode :)? >> >> Thanks >> Veit >> >> >> >> Gesendet: Mittwoch, 03. Februar 2016 um 12:37 Uhr >> Von: "Veit Guna" <[email protected]> >> An: [email protected] >> Betreff: Aw: Re: RollingRandomAccessFile and emtpy log file >> Hi Remko. >> >> I've read about the AsyncLoggerContextSelector but I didn't try it - to be >> honest. As the documentation doesn't state anything about >> that the RollingRandomAccessFile appender needs async functionality, I >> didn't took this into account. >> Maybe there could be added some hint in the documentation about that (needs >> async or not)? Or maybe just don't allow starting up log4j when >> the configuration is (obviously) wrong :)? >> >> So I'll check for the async configuration option and report back. >> >> Thanks! >> Veit >> >> >> >> >> Gesendet: Mittwoch, 03. Februar 2016 um 12:13 Uhr >> Von: "Remko Popma" <[email protected]> >> An: "Log4J Users List" <[email protected]> >> Betreff: Re: RollingRandomAccessFile and emtpy log file >> I would say immediateFlush but that doesn't explain why you're not seeing >> the update until after logging 600 KB when the buffer is only 256 KB... >> >> Have you tried setting system property >> -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector >> to switch on async loggers? This will ensure the buffer is always flushed to >> disk, but it uses smart batching to achieve this in an efficient manner (and >> it happens on the background thread, so no impact on your application). >> >> Sent from my iPhone >> >>> On 2016/02/03, at 17:47, Veit Guna <[email protected]> wrote: >>> >>> Hi. >>> >>> I'm using log4j 2.5 with the RollingRandomAccessFile. When the application >>> starts up and performs logging, the logfile >>> gets created, but nothing is written to it. Only after I stop the >>> application the content appears. I also doublechecked the 256KB >>> buffer. But logging 600KB doesn't seem to trigger a write to the file. >>> Console appender is working fine. >>> >>> Any idea what I'm missing? >>> >>> Here's my configuration: >>> >>> --cut here-- >>> <?xml version="1.0" encoding="UTF-8"?> >>> <Configuration> >>> >>> <Properties> >>> <Property name="logsPath">${sys:app.logs:-${env:APP_LOGS:-logs}}</Property> >>> </Properties> >>> >>> <Appenders> >>> <RollingRandomAccessFile name="rollingFileAppender" >>> fileName="${logsPath}/app.log" >>> filePattern="${logsPath}/app-%d{yyyy-MM-dd}-%i.log" immediateFlush="false"> >>> <PatternLayout> >>> <pattern>%d %-5p [%mdc{RQID}] [%c{1}] - %m%n</pattern> >>> </PatternLayout> >>> <Policies> >>> <SizeBasedTriggeringPolicy size="10 MB" /> >>> </Policies> >>> <DefaultRolloverStrategy max="5" /> >>> </RollingRandomAccessFile> >>> <Console name="consoleAppender" target="SYSTEM_OUT"> >>> <PatternLayout pattern="%d{HH:mm:ss,SSS} %-5p [%mdc{RQID}] [%c{1}] - %m%n" >>> /> >>> </Console> >>> </Appenders> >>> >>> <Loggers> >>> <Logger name="com.acme.app" level="info" /> >>> >>> <!-- spring --> >>> <Logger name="org.springframework.security" level="info" /> >>> <Logger name="org.springframework.transaction" level="info" /> >>> <Logger name="org.springframework.orm.jpa" level="info" /> >>> >>> <!-- log SQL statements --> >>> <Logger name="org.hibernate.SQL" level="error" /> >>> <!-- log bind parameters --> >>> <Logger name="org.hibernate.type" level="error" /> >>> >>> <Root level="info"> >>> <AppenderRef ref="consoleAppender" /> >>> <AppenderRef ref="rollingFileAppender" /> >>> </Root> >>> </Loggers> >>> >>> </Configuration> >>> --cut here-- >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [email protected] >>> For additional commands, e-mail: [email protected] >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
