I am trying to implement logback in my maven project. I have added a class named AUDITJsonLayout which is extending JsonLayout for populating custom JSON fields in my log file/console inside message:"" (for eg: "trace-id", "operation-name:","URI:"")
However I am getting exception as ClassNotfound. I have tried changing the filepath and saved at src_boot/main/resources as well however same error. Not sure what went wrong. I am stuck for days trying to resolve the same.
Below are the files that I have created along with the exception details.
|-ERROR in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Could not create component [layout] of type [main.resources.logging.AUDITJsonLayout] java.lang.ClassNotFoundException: main.resources.logging.AUDITJsonLayout
at java.lang.ClassNotFoundException: main.resources.logging.AUDITJsonLayout
at at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at at ch.qos.logback.core.util.Loader.loadClass(Loader.java:120)
at at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.begin(NestedComplexPropertyIA.java:102)
at at ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:269)
at at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:145)
at at ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:128)
at at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:50)
at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
at at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
at at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
at at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
at at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
at at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128)
at at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107)
at at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:295)
at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269)
at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)
at at org.apache.geronimo.transaction.manager.TransactionManagerImpl.<clinit>(TransactionManagerImpl.java:42)
at at java.base/java.lang.Class.forName0(Native Method)
at at java.base/java.lang.Class.forName(Class.java:315)
at at amdocs.ecommerce.esi.utils.db.geronimo.GeronimoFactory.initTransactionManager(GeronimoFactory.java:61)
at at amdocs.ecommerce.esi.utils.db.geronimo.GeronimoFactory.<clinit>(GeronimoFactory.java:23)
at at amdocs.ecommerce.esi.utils.db.dbcp.GeronimoTXDataSourceFactory.createDataSource(GeronimoTXDataSourceFactory.java:16)
at at amdocs.ecommerce.esi.utils.db.dbcp.BasicEncryptedDataSourceFactory.getObjectInstance(BasicEncryptedDataSourceFactory.java:193)
at at org.apache.naming.factory.FactoryBase.getObjectInstance(FactoryBase.java:96)
at at java.naming/javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:341)
at at org.apache.naming.NamingContext.lookup(NamingContext.java:864)
at at org.apache.naming.NamingContext.lookup(NamingContext.java:172)
at at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1020)
at at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:559)
at at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:252)
at at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:926)
at at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
at at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
at at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
at at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)
08:23:43,769 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@14:88 - no appli
Below are the configuration details that i have added in my project
pom.xml
<dependency>
<groupId>com.o2alib.lib.ext.logback</groupId>
<artifactId>logback-jackson-0.1.5</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.o2alib.lib.ext.logback</groupId>
<artifactId>logback-json-classic-0.1.5</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.o2alib.lib.ext.logback</groupId>
<artifactId>logback-json-core-0.1.5</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.o2alib.lib.endorsed</groupId>
<artifactId>slf4j-api-1.7.25</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.o2alib.lib.endorsed</groupId>
<artifactId>slf4j-simple-1.7.25</artifactId>
<version>1.0.0</version>
</dependency>
logback.xml:
<configuration>
<appender name="JESIWF_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--See also http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
<File>./logs/JESIWF.log</File>
<encoder>
<jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
<prettyPrint>false</prettyPrint>
</jsonFormatter>
<timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
<appendLineSeparator>true</appendLineSeparator>
<!--pattern><%d> <%p> <Amdocs> <%c{1}> %m%n</pattern-->
<pattern>
{"timestamp": "%d{yyyy-MM-dd}T%d{HH:mm:ss.SSS}","level": "%p","logger": "%c","message":"%m"}%n
</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<maxIndex>5</maxIndex>
<FileNamePattern>./logs/JESIWF.log.%i</FileNamePattern>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>1000KB</MaxFileSize>
</triggeringPolicy>
</appender>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="src.main.java.AUDITLayoutClass">
<jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
<prettyPrint>false</prettyPrint>
</jsonFormatter>
<timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
<appendLineSeparator>true</appendLineSeparator>
</layout>
</encoder>
</appender>
<appender name="ASYNC_CONSOLE" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="CONSOLE" />
<queueSize>3072</queueSize>
<discardingThreshold>10</discardingThreshold>
<includeCallerData>true</includeCallerData>
<neverBlock>true</neverBlock>
</appender>
<logger name="JESIWF" additivity="false" level="INFO">
<appender-ref ref="ASYNC_CONSOLE"/>
</logger>
<logger name="net.sf.dozer" additivity="false" level="WARN">
<appender-ref ref="ASYNC_CONSOLE"/>
</logger>
<logger name="console" additivity="false" level="INFO">
<appender-ref ref="ASYNC_CONSOLE"/>
</logger>
<root level="ERROR">
<appender-ref ref="ASYNC_CONSOLE"/>
</root>
</configuration>
AUDITLayoutClass.java
import ch.qos.logback.contrib.json.classic.JsonLayout;
import ch.qos.logback;
import java.util.Map;
public class AUDITLayoutClass extends JsonLayout {
@Override
protected void addCustomDataToJsonMap(Map<String, Object> map, ILoggingEvent event)
{
add("Operation-Type", true, "AUDIT", map);
add("Operation-Name", true, "Kafka", map);
add("Operation-Description", true, "checking kafka", map);
add("Operation-Status-as-Success", true, "fail", map);
}
}