Fwd: Log4j2: Stack overflow error after logging configuration with java api

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Fwd: Log4j2: Stack overflow error after logging configuration with java api

Sergii Volokh
Hi Guys!

I have some logging configuration staff using java api.
And migrating from log4j2 v2.2 to v2.8.2, I've got StackOverflowError
inside of Log4j logger.
The problem was finally resolved with configuration logic correction, but
it still seems to be a reason to fix something inside of Log4j to prevent
such cases.
Here is a simplified test code, which lead to the exception.

>>>>>
    @Test
    public void test1() throws FileNotFoundException, IOException {
        XmlConfiguration conf = new XmlConfiguration(
                LoggerContext.getContext(),
                new ConfigurationSource(new FileInputStream(
                        new File("log4j2.xml"))));

        ((LoggerContext) LogManager.getContext(false)).start(conf);

        Logger log = (Logger) LogManager.getLogger();
        log.getContext().start(conf);

        log.info("Hello world");
    }
<<<<<

This code is not fully correct, but it does not look like a criminal. So,
its not good that log4j fails on this.

Thanks.
--
WBR, Sergii
Reply | Threaded
Open this post in threaded view
|

Re: Log4j2: Stack overflow error after logging configuration with java api

Gary Gregory-4
Hi,

Can you post a bit of the stack trace?

Gary

On Fri, Apr 28, 2017 at 9:05 AM, Sergii Volokh <[hidden email]>
wrote:

> Hi Guys!
>
> I have some logging configuration staff using java api.
> And migrating from log4j2 v2.2 to v2.8.2, I've got StackOverflowError
> inside of Log4j logger.
> The problem was finally resolved with configuration logic correction, but
> it still seems to be a reason to fix something inside of Log4j to prevent
> such cases.
> Here is a simplified test code, which lead to the exception.
>
> >>>>>
>     @Test
>     public void test1() throws FileNotFoundException, IOException {
>         XmlConfiguration conf = new XmlConfiguration(
>                 LoggerContext.getContext(),
>                 new ConfigurationSource(new FileInputStream(
>                         new File("log4j2.xml"))));
>
>         ((LoggerContext) LogManager.getContext(false)).start(conf);
>
>         Logger log = (Logger) LogManager.getLogger();
>         log.getContext().start(conf);
>
>         log.info("Hello world");
>     }
> <<<<<
>
> This code is not fully correct, but it does not look like a criminal. So,
> its not good that log4j fails on this.
>
> Thanks.
> --
> WBR, Sergii
>



--
E-Mail: [hidden email] | [hidden email]
Java Persistence with Hibernate, Second Edition
<https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>

<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459>
JUnit in Action, Second Edition
<https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22>

<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021>
Spring Batch in Action
<https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory
Reply | Threaded
Open this post in threaded view
|

Re: Log4j2: Stack overflow error after logging configuration with java api

Sergii Volokh
Hi Gary!

Unfortunately, I do not have access to the environment for now.
But I do remember the place.
It was a single step stack strace cycle in
"org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy",
line 97.
Following method recursively calls itself (the same object instance):
>>>>>>>
    public LoggerConfig getActiveLoggerConfig(final Supplier<LoggerConfig>
next) {
        LoggerConfig result = this.loggerConfig;
        if (!beforeLogEvent()) {
            result = next.get();
            return
result.getReliabilityStrategy().getActiveLoggerConfig(next);
        }
        return result;
    }
<<<<<<<

Thanks.
WBR, Sergey


2017-04-28 21:06 GMT+03:00 Gary Gregory <[hidden email]>:

> Hi,
>
> Can you post a bit of the stack trace?
>
> Gary
>
> On Fri, Apr 28, 2017 at 9:05 AM, Sergii Volokh <[hidden email]>
> wrote:
>
> > Hi Guys!
> >
> > I have some logging configuration staff using java api.
> > And migrating from log4j2 v2.2 to v2.8.2, I've got StackOverflowError
> > inside of Log4j logger.
> > The problem was finally resolved with configuration logic correction, but
> > it still seems to be a reason to fix something inside of Log4j to prevent
> > such cases.
> > Here is a simplified test code, which lead to the exception.
> >
> > >>>>>
> >     @Test
> >     public void test1() throws FileNotFoundException, IOException {
> >         XmlConfiguration conf = new XmlConfiguration(
> >                 LoggerContext.getContext(),
> >                 new ConfigurationSource(new FileInputStream(
> >                         new File("log4j2.xml"))));
> >
> >         ((LoggerContext) LogManager.getContext(false)).start(conf);
> >
> >         Logger log = (Logger) LogManager.getLogger();
> >         log.getContext().start(conf);
> >
> >         log.info("Hello world");
> >     }
> > <<<<<
> >
> > This code is not fully correct, but it does not look like a criminal. So,
> > its not good that log4j fails on this.
> >
> > Thanks.
> > --
> > WBR, Sergii
> >
>
>
>
> --
> E-Mail: [hidden email] | [hidden email]
> Java Persistence with Hibernate, Second Edition
> <https://www.amazon.com/gp/product/1617290459/ref=as_li_
> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&
> linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>
>
> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=
> 1617290459>
> JUnit in Action, Second Edition
> <https://www.amazon.com/gp/product/1935182021/ref=as_li_
> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&
> linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22
> >
>
> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=
> 1935182021>
> Spring Batch in Action
> <https://www.amazon.com/gp/product/1935182951/ref=as_li_
> tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&
> linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%
> 7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
> <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=
> 1935182951>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
>



--
WBR, Sergii