I would suggest finding some baseline that works by using -D on the command line definition of your CI.
Gary On Wed, Sep 29, 2021, 12:12 Travis Spencer <tra...@curity.io> wrote: > Greetings, Log4j list. > > I am testing some extensions that I have made to my usage of Log4j. > This usage involves a custom log event factory. I set this in my > actual program on startup using a system property. Now, to test this > in a unit test, I'm trying to set a system property in the same sort > of way. To that end, I have a static block in the test and a JUnit > ClassRule like this: > > static > { > System.setProperty("log4j2.logEventFactory", > MyGoodLogEventFactory.class.getName()); > } > > @ClassRule > public static LoggerContextRule _context = new > LoggerContextRule("myGoodConfig.xml"); > > This works perfectly on my local machine. In our CI system, however, > this fails sometimes. If I run only this one test in the CI system, it > passes every time. If I run all unit tests, however, it usually fails, > but does occasionally succeed. The hypothesis is that it depends on > which unit test is run first and whether or not the Log4j subsystem is > initialized yet. If it's not, the system property above is set and > everything works. If the Log4j subsystem is initialized, however, by > the time this test runs, then the system property (and thus the log > event factory) is not used. > > To test this hypothesis, I updated the test to do this instead: > > static > { > System.setProperty("log4j2.logEventFactory", > MaskedLogEventFactory.class.getName()); > LoggerContextRule context = new LoggerContextRule("myGoodConfig.xml"); > if (context.getLoggerContext() != null) context.reconfigure(); > _context = context; > } > > @ClassRule > public static LoggerContextRule _context; > > This had no effect though, and the test still passed locally, passed > remotely if it was the only test run, but failed intermittently if run > as a part of the entire suite. > > Looking through the Log4j source, I only found one test that was > setting a custom log event factory, > > src/test/java/org/apache/logging/log4j/core/async/AsyncLoggerConfigErrorOnFormat.java. > This test, however, doesn't use the LoggerContextRule to configure the > system. I really like this API for the tests and would like to > continue to use it. > > Can anyone offer me help in: > > 1. Confirming that my hypothesis is correct that the tests likely fail > intermittently due to the initialization state of the Log4j subsystem > 2. Suggest a way to make the rest more resilient > > TIA! > > Travis Spencer > > --------------------------------------------------------------------- > To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org > For additional commands, e-mail: log4j-user-h...@logging.apache.org > >