What if a configuration could contain conditional statements? For instance:

<Config>
        <Define EnvironmentVariable="Hour" Value="12" />
        <Define EnvironmentVariable="Minute" Value="0" />
        <If EnvironmentVariable="JVM" Equals="JVM1">
                <Define EnvironmentVariable="Minute" Value="0" />
        </If>
        <If EnvironmentVariable="JVM" Equals="JVM2">
                <Define EnvironmentVariable="Minute" Value="1" />
        </If>
        <RollingFileAppender>
                <RollingCondition>
                        <Cron Minute="$Minute" Hour="$Hour" DayOfMonth="*" Month="*" 
DayOfWeek="*" />
                </RollingCondition>
        </RollingFileAppender>
</Config>

Cheers

On 2017-03-24 11:08, Remko Popma wrote:
I see what you are saying, but the use case is to have a single configuration, 
that is what drives the request.

Sent from my iPhone

On Mar 24, 2017, at 17:22, Dominik Psenner <dpsen...@apache.org> wrote:

Hi there,

Cron proved itself very to be stable and usable over the past years. FWIW, I 
would not recommend to introduce a randomization algorithm. An application that 
does things random means that the application does things when nobody expects 
it to do so. Further it does not solve the problem. One just needs enough JVMs 
to roll around at the same time with a randomizer does not produce large enough 
values to spread the rolling over a larger amount of time. The available CPU is 
then quickly drain out. In my opinion, it's better to configure the several 
rollings to be delayed, meaning that JVM1 rolls at 12:00, JVM2 rolls at 12:01, 
...

Cheers, Dominik

On 2017-03-23 15:04, Anthony Maire wrote:
https://issues.apache.org/jira/browse/LOG4J2-1855
https://github.com/apache/logging-log4j2/pull/68

Let me know if you want me to do some changes

Regards,
Anthony


2017-03-23 13:15 GMT+01:00 Anthony Maire <maire.anth...@gmail.com>:

Ok,  I will open a jira ticket and provide a PR.

Thanks for your input.

Le 23 mars 2017 13:08, "Remko Popma" <remko.po...@gmail.com> a écrit :

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



---------------------------------------------------------------------
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

Reply via email to