I see what you mean now. I agree it's better to keep the rollover concept to mean file rename and compression that happen in sequence together. So the randomization affects when the _sequence_ is triggered, not just one part of the sequence. Makes sense.
Sent from my iPhone > On Mar 23, 2017, at 16:28, Anthony Maire <maire.anth...@gmail.com> wrote: > > Hi Remko > > My first idea was to have the rolling that triggers at the expected time, > and the compression that will be delayed. That's why I wanted the delayed > compression to occur before shutdown since the rolling already occurred. > > But I think that's a bad idea. First, it will lead to "fancy code" and I > would like to avoid it too. But the main issue is that this behavior should > impact only the time based triggering when combining several policy. So the > code should be related to the triggering policy and not to the rolling > strategy. > > So the best thing to do is to add some property on the timed base > triggering policy and let that class handle all the logic and delay the > triggering itself instead of the compression. > > Are you OK with that? > > Anthony > > Le 23 mars 2017 00:24, "Remko Popma" <remko.po...@gmail.com> a écrit : > > >> On Mar 23, 2017, at 1:06, Anthony Maire <maire.anth...@gmail.com> wrote: >> >> Thanks for these answers >> >> @Ralph : that was the kind of idea I had in mind : changing the >> RollingFileManager.asyncExecutor to be a ScheduledThreadPoolExecutor, and >> based on some configuration, submitting task to be executed after a random >> delay. However with this kind of approach, special treatment should be > made >> if the manager is stopped with some pending delayed tasks in it. > > I'm okay with randomization except for this last bit about "special > treatment...". Let's not make it too fancy. If the manager is stopped > before it rolled over, then it didn't roll over, just like it works > currently. I don't see the point of adding extra logic to trigger a > rollover when the manager is stopped within the randomized time window. > >> >> @Matt : Cron policy can be a solution, but I don't know how to inject some >> random element in this to make the file roll at midnight + X random >> seconds. Since there is a lot of JVM to manage and some of them can be >> moved from a machine to another, I need to have a single log4j2.xml file >> for all environments. Moreover, our system administrators are reluctant to >> have something based on a shell-specific feature (such has the $RANDOM >> variable from bash) >> >> Anthony >> >> 2017-03-22 16:31 GMT+01:00 Ralph Goers <ralph.go...@dslextreme.com>: >> >>> These are separate JVMs, so having a single executor would be of no help. >>> >>> I believe the only way to do what you are asking for is to add >>> configuration so that the asynchronous thread has a semi-random delay > when >>> it starts. >>> >>> Ralph >>> >>>> On Mar 22, 2017, at 7:58 AM, Greg Thomas <greg.d.tho...@gmail.com> >>> wrote: >>>> >>>>> One common issue we have with that framework (and I assume we can have >>> the >>>>> same with log4j2) is that all of our JVMs (we can have more than 50 >>> JVMs on >>>>> the same server in production) roll their file at midnight. >>>>> >>>>> When this happens, the system became often not usable for a few seconds >>>>> because of the simultaneous zipping of all the rolled files that >>> overload >>>>> the CPU (although zipping is done in a specific background thread). >>>> >>>> ISTR that with the most recent versions of log4j, these threads are in a >>>> thread pool so that they are properly shutdown at the right time. I >>> wonder >>>> if it's possible (or could be possible) to somehow inject a thread pool >>> in >>>> to log4j for this rollover, so that for you use case you could inject a >>>> single thread executor, so only one thread is ever compressing at a > time. >>>> >>>> Just a thought, anyway, >>>> >>>> Greg >>>> >>>> On 22 March 2017 at 13:47, Anthony Maire <maire.anth...@gmail.com> >>> wrote: >>>> >>>>> Hi >>>>> >>>>> We are currently using another logging framework in production, but I'm >>>>> pushing to change it for log4j2. >>>>> >>>>> One common issue we have with that framework (and I assume we can have >>> the >>>>> same with log4j2) is that all of our JVMs (we can have more than 50 >>> JVMs on >>>>> the same server in production) roll their file at midnight. >>>>> >>>>> When this happens, the system became often not usable for a few seconds >>>>> because of the simultaneous zipping of all the rolled files that >>> overload >>>>> the CPU (although zipping is done in a specific background thread). To >>>>> reduce this effect, we are combining a time based rolling policy with a >>>>> sized based policy to zip smaller files, but this is not enough to make >>> the >>>>> system fully responsive at midnight. >>>>> >>>>> A pretty cool feature for us to avoid this issue is to have the >>> possibility >>>>> when a rolling is triggered because of a time based policy to change >>> file >>>>> immediately, but to wait for a random amount of time (within a >>> configurable >>>>> limit) before starting the compression. This random delay should help a >>> lot >>>>> to avoid contention on CPU cycles. >>>>> >>>>> Does log4j2 have something to solve this kind of issue ? If not, would >>> you >>>>> accept a pull request for this (I will open a Jira if needed) ? >>>>> >>>>> Regards, >>>>> Anthony >>>>> >>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org >>> For additional commands, e-mail: log4j-user-h...@logging.apache.org >>> >>> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org > For additional commands, e-mail: log4j-user-h...@logging.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org For additional commands, e-mail: log4j-user-h...@logging.apache.org