Log4j2 Async logger issue

Hi Team,

Trying to implement async logger using log4j2 disruptor. And have loaded all the below three jars into package/code/jar folder.
Restart IS and reloaded package too.

log4j-core
log4j-API
disruptor-3.4.2

The log4j and log4j API jars working fine. But the disruptor is not working with below error. Cna any one help here?

IS version 10.11
Platform Windows.

HTTP Handler 127.0.0.1 ERROR Unable to invoke factory method in class org.apache.logging.log4j.core.async.AsyncLoggerConfig for element AsyncLogger: java.lang.NoClassDefFoundError: com/lmax/disruptor/EventHandler java.lang.reflect.InvocationTargetException
INFO | jvm 2 | 2023/08/01 13:25:04 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
INFO | jvm 2 | 2023/08/01 13:25:04 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
INFO | jvm 2 | 2023/08/01 13:25:04 | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
INFO | jvm 2 | 2023/08/01 13:25:04 | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:136)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:1120)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1045)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:1037)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:651)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:247)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:293)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:626)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:699)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.LoggerContext.setConfigLocation(LoggerContext.java:684)
INFO | jvm 2 | 2023/08/01 13:25:04 | at DemoLog4j2.Utilities.JavaServices.initLog4j2(JavaServices.java:138)
INFO | jvm 2 | 2023/08/01 13:25:04 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
INFO | jvm 2 | 2023/08/01 13:25:04 | at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
INFO | jvm 2 | 2023/08/01 13:25:04 | at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
INFO | jvm 2 | 2023/08/01 13:25:04 | at java.base/java.lang.reflect.Method.invoke(Method.java:566)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.JavaService.baseInvoke(JavaService.java:404)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:759)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:53)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:339)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:33)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:400)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:629)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:434)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:392)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:260)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.BaseService.invoke(BaseService.java:231)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.lang.flow.FlowInvoke.invoke(FlowInvoke.java:263)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.lang.flow.FlowState.invokeNode(FlowState.java:662)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.lang.flow.FlowState.step(FlowState.java:527)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.lang.flow.FlowState.invoke(FlowState.java:494)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.FlowSvcImpl.baseInvoke(FlowSvcImpl.java:1150)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.InvokeManager.process(InvokeManager.java:759)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.util.tspace.ReservationProcessor.process(ReservationProcessor.java:39)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.StatisticsProcessor.process(StatisticsProcessor.java:53)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.ServiceCompletionImpl.process(ServiceCompletionImpl.java:243)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.ValidateProcessor.process(ValidateProcessor.java:49)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.PipelineProcessor.process(PipelineProcessor.java:171)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.ACLManager.process(ACLManager.java:339)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.DispatchProcessor.process(DispatchProcessor.java:33)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.AuditLogManager.process(AuditLogManager.java:400)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:629)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:434)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.invoke.InvokeManager.invoke(InvokeManager.java:392)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.ServiceManager.invoke(ServiceManager.java:260)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.comm.DefaultServerRequestHandler.handleMessage(DefaultServerRequestHandler.java:119)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.HTTPMessageHandler.process(HTTPMessageHandler.java:158)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.HTTPDispatch.handleRequest(HTTPDispatch.java:203)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.app.b2b.server.Dispatch.run(Dispatch.java:391)
INFO | jvm 2 | 2023/08/01 13:25:04 | at com.wm.util.pool.PooledThread.run(PooledThread.java:127)
INFO | jvm 2 | 2023/08/01 13:25:04 | at java.base/java.lang.Thread.run(Thread.java:829)
INFO | jvm 2 | 2023/08/01 13:25:04 | Caused by: java.lang.NoClassDefFoundError: com/lmax/disruptor/EventHandler
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.config.AbstractConfiguration.getAsyncLoggerConfigDelegate(AbstractConfiguration.java:211)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.async.AsyncLoggerConfig.(AsyncLoggerConfig.java:90)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.apache.logging.log4j.core.async.AsyncLoggerConfig.createLogger(AsyncLoggerConfig.java:273)
INFO | jvm 2 | 2023/08/01 13:25:04 | … 58 more
INFO | jvm 2 | 2023/08/01 13:25:04 | Caused by: java.lang.ClassNotFoundException: com.lmax.disruptor.EventHandler cannot be found by org.apache.logging.log4j.core_2.17.1
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:511)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:414)
INFO | jvm 2 | 2023/08/01 13:25:04 | at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:153)
INFO | jvm 2 | 2023/08/01 13:25:04 | at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
INFO | jvm 2 | 2023/08/01 13:25:04 | … 61 more
INFO | jvm 2 | 2023/08/01 13:25:04 |
INFO | jvm 2 | 2023/08/01 13:25:04 | 2023-08-01 13:25:03,386 HTTP Handler 127.0.0.1 ERROR Null object returned for AsyncLogger in Loggers.
INFO | jvm 2 | 2023/08/01 13:25:04 | 2023-08-01 13:25:03,388 HTTP Handler 127.0.0.1 ERROR Null object returned for AsyncLogger in Loggers.
INFO | jvm 2 | 2023/08/01 13:25:04 | 2023-08-01 13:25:03,388 HTTP Handler 127.0.0.1 ERROR Null object returned for AsyncLogger in Loggers.
INFO | jvm 2 | 2023/08/01 13:25:04 | 2023-08-01 13:25:03,388 HTTP Handler 127.0.0.1 ERROR Null object returned for AsyncLogger in Loggers.
INFO | jvm 2 | 2023/08/01 13:25:04 | 2023-08-01 13:25:03.41 : Integration Server detected loss of its Log4j configuration. Integration Server is restoring its Log4j configuration.

log4j2.xml (1.3 KB)

PFA for the log4j file.

Log4j is already a part of the wM IS environment. You should see it listed in the server classpath on the About page in IS Administrator. Take note of the last entry in the stack trace that was posted.

You’re likely experiencing library version conflicts.

I’m unlikely to persuade you away from using log4j but you might consider creating logging facilities in an “integration Server way” instead of a “Java way.”

The IS API com.wm.app.b2b.server.LogOutputStream provides a basis for auto-rotating custom log files. We’ve used this in couple of cases, long ago. We usually don’t use these days – most of the logging we do is to the MWS activity log.

As with everything, there are pros/cons to that approach. Bloated library with obtuse configuration files and security vulnerabilities (from a logging library!) are not amongst those. :slight_smile:

Thanks Reamon, Right the log4j are already part of it so I guess it is taken care. This disruptor, do I need to add it under static folder and make it available for IS?

I don’t want to go on why we don’t want IS way of logging, which we did and now using log4j2 :smile:

Just to add, I removed log4j jars to avoid conflicts with IS provided and kept disruptor jar alone. Which is similar to Log4j Asynchronous in 10.5 IS , but still adding the entry “package” didn’t resolve the issue. Please let me know whether am I missing something?

Presumably, yes. Perhaps someone in the forums has additional details. Likely need to make sure the version is compatible. And address dependencies. Hopefully the dependencies don’t cause an explosion of loading more and more libraries, the way these things can sometimes go. :slight_smile:

From the description, I’m not sure if your issue is related. However, when we upgraded from version 10.3 to 10.11, our custom logging package (which is based on Log4Jv2) stopped working. It turned out to be a classloader issue. Upon changing the manifest.v3 file in the package to use the “package” classloader, the issue went away.

To do so, you can add the following entry to the manifest.v3 file:

<value name="classloader">package</value>

Hope this helps,
Percio

1 Like

Thanks Percio, forgot to update this page. Finally it worked after adding calssloader and I have achieved the expected results.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.