Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Is log4j2-appender-nodep / log4j2-appender incompatible with JDK 8? #103

Closed
sarnobat opened this issue Feb 7, 2023 · 7 comments
Closed

Comments

@sarnobat
Copy link

sarnobat commented Feb 7, 2023

Error message

When I start my tomcat app with <Loki... inside my log4j2.xml

Caused by: java.lang.UnsupportedClassVersionError: pl/tkowalcz/tjahzi/log4j2/Header has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (unable to load class [pl.tkowalcz.tjahzi.log4j2.Header])

My code

    compile (group: 'pl.tkowalcz.tjahzi', name: 'log4j2-appender', version: '0.9.17')

I tried using versions between 0.4 and 0.9.17 but got the same issue each time.

Notes

Q: Why am I still on JDK 8?
A: It's a legacy product that we are still supporting a lot of old components of (though there are plans to upgrade to 11 and after that 17).

(edit) Full stack trace

java.lang.UnsupportedClassVersionError: pl/tkowalcz/tjahzi/log4j2/Header has been compiled by a more recent version of the Java Runtime (class file version 53.0), this version of the Java Runtime only recognizes class file versions up to 52.0 (unable to load class [pl.tkowalcz.tjahzi.log4j2.Header])
	at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2437)
	at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:864)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1187)
	at org.apache.logging.log4j.core.config.plugins.util.PluginRegistry.decodeCacheFiles(PluginRegistry.java:181)
	at org.apache.logging.log4j.core.config.plugins.util.PluginRegistry.loadFromMainClassLoader(PluginRegistry.java:119)
	at org.apache.logging.log4j.core.config.plugins.util.PluginManager.collectPlugins(PluginManager.java:132)
	at org.apache.logging.log4j.core.pattern.PatternParser.<init>(PatternParser.java:131)
	at org.apache.logging.log4j.core.pattern.PatternParser.<init>(PatternParser.java:112)
	at org.apache.logging.log4j.core.layout.PatternLayout.createPatternParser(PatternLayout.java:219)
	at org.apache.logging.log4j.core.layout.PatternLayout.<init>(PatternLayout.java:137)
	at org.apache.logging.log4j.core.layout.PatternLayout.<init>(PatternLayout.java:56)
	at org.apache.logging.log4j.core.layout.PatternLayout$Builder.build(PatternLayout.java:432)
	at org.apache.logging.log4j.core.config.DefaultConfiguration.<init>(DefaultConfiguration.java:58)
	at org.apache.logging.log4j.core.LoggerContext.<init>(LoggerContext.java:75)
	at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.locateContext(ClassLoaderContextSelector.java:145)
	at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:70)
	at org.apache.logging.log4j.core.selector.ClassLoaderContextSelector.getContext(ClassLoaderContextSelector.java:57)
	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:141)
	at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:41)
	at org.apache.logging.log4j.LogManager.getContext(LogManager.java:185)
	at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:458)
	at com.MyProgrammaticLogger.<clinit>(MyProgrammaticLogger.java:XX)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:87)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1032)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:985)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:191)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:638)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:942)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
	at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:410)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4716)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5172)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:706)
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1023)
	at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1903)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
	at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112)
	at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:824)
	at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:474)
	at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1611)
	at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:319)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
	at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:423)
	at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:366)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:936)
	at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:843)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1384)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1374)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
	at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
	at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:909)
	at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:342)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
@tkowalcz
Copy link
Owner

tkowalcz commented Feb 8, 2023

No need to explain yourself. I explicitly made it work with Java 8. Probably problem with CI and release setup on CircleCI. I'll investigate tomorrow.

@sarnobat
Copy link
Author

sarnobat commented Feb 8, 2023

Thank you for your understanding and quick response. Indeed I saw source and target set to 1.8 in pom.xml.

On our other product the LokiAppender works beautifully (and saved me implementing a huge amount of bug-ridden code myself).

I look forward to your findings.

@sarnobat
Copy link
Author

sarnobat commented Feb 8, 2023

Additional info

Here are the jars that are packaged into my webapp.

2.4.1.txt

I'm supporting both log4j v1 and v2 in my log server. But I don't think that's relevant.

@tkowalcz
Copy link
Owner

tkowalcz commented Feb 8, 2023

I have created an empty project with just pl.tkowalcz.tjahzi:log4j2-appender:0.9.17 and was able to run it without a problem. Can you verify that you are actually pulling that version? Versions earlier than 0.9.9 were compiled with Java 9 and would cause that error. Even better - upgrade to latest 0.9.26 :)

@sarnobat
Copy link
Author

sarnobat commented Feb 9, 2023

Thank you for investigating. I will get back to you at my earliest convenience (juggling a couple of different projects right now!) and if I still experience it, will give you more precise version info.

@sarnobat
Copy link
Author

sarnobat commented Feb 9, 2023

Small update - when I moved from 0.9.17 to 0.9.26 I broke something and logs were not getting sent. Will give further updates when I reach that stage

EDIT: that was nothing to do with the version.

@sarnobat
Copy link
Author

sarnobat commented Feb 10, 2023

I think it may be more time than anticipated verifying this (too much work, vacation etc). I have no reason to believe what you said isn't true for me. Could I suggest you close the ticket and I reopen it if I need further help?

The JDK version issue is gone using 0.9.26 so that's not an issue. I think the problem is I'm trying to get Log4j 2.4.1 to work with it, which is not trivial. But that's something for me to deal with. Closing. Thank you for the quick support.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants