1

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>&lt;%d&gt; &lt;%p&gt; &lt;Amdocs&gt; &lt;%c{1}&gt; %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);
    }
}
Jetto Martínez
  • 917
  • 7
  • 17

0 Answers0