Search code examples
wso2wso2-esbwso2-enterprise-integrator

Logging is not functioning properly after changing Logging Configuration via managemnt console in WSO2 EI 6.5.0


I have developed API which call the class mediator via sequence in WSO2 EI 6.5.0. Initially API logs are getting printed except class mediator logs in Server log.

To enable logs for class mediator as per this, I logged into management console Home> Configure> Logging section and went to section Configure Log4J Loggers , searched log keyword whatever i added inside class mediator to find out class mediator and changed class level to Debug

management console

post this change, nothing is printed when i invoke service via postman, but API response getting. I just restarted server, post this management console url also not getting printed in server logs.

Below is the management console logging configuration image for reference.

total page

Class Mediator:

package com.abc.in;
import org.apache.synapse.MessageContext; 
import org.apache.synapse.mediators.AbstractMediator;
import org.apache.synapse.core.axis2.Axis2MessageContext;
/*import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;*/


import java.util.ArrayList;
import java.util.Map;

public class DuplicateHeadersMediator extends AbstractMediator {

    // private static final Log logger = LogFactory.getLog(DuplicateHeadersMediator.class);
    public boolean mediate(MessageContext messageContext) {
         log.info("DuplicateHeadersMediator called********** : " );
         trace.info("trace DuplicateHeadersMediator called********** :");
        org.apache.axis2.context.MessageContext axis2MessageContext = ((Axis2MessageContext) messageContext)
                .getAxis2MessageContext();
       
        Map excessHeaders = (Map) axis2MessageContext.getProperty("EXCESS_TRANSPORT_HEADERS");
        log.info("excessHeaders : " + excessHeaders.entrySet());
        trace.info("trace excessHeaders : " + excessHeaders.entrySet());
        Map transportHeaders = (Map) axis2MessageContext.getProperty("TRANSPORT_HEADERS");
        log.info("transportHeaders : " + transportHeaders.entrySet());
        trace.info("trace transportHeaders : " + transportHeaders.entrySet());
        if (excessHeaders.size() != 0 && transportHeaders.size() != 0) {
            for (Object key : transportHeaders.keySet()) {
                addPropertiesForExcessHeaders((String)key,excessHeaders,messageContext);
            }
        }
        return true;
    }

    // Add extra properties to the synapse message context for duplicated headers.
    private void addPropertiesForExcessHeaders(String headerName, Map excessHeaders, MessageContext messageContext) {
        if (excessHeaders.get(headerName) != null) {
            ArrayList<String> list = (ArrayList) excessHeaders.get(headerName);
            if (list.size() > 0) {
                int i = 2;
                for (String value : list) {
                    String propName = headerName + i;
                    messageContext.setProperty(propName, value);
                    log.info("propName : " + propName);
                    trace.info("trace propName : " + propName);
                    i += 1;
                }
            }
        }
    }
    
    
}

API:

<?xml version="1.0" encoding="UTF-8"?>
<api context="/readcookiesapi" name="ReadCookiesAPI" xmlns="http://ws.apache.org/ns/synapse">
    <resource methods="POST">
        <inSequence>
            <log level="custom">
                <property name="ReadCookiesAPI" value="is called *****"/>
            </log>
            <sequence key="HeaderMediatorCall_Sequecne"/>
            <log level="custom">
                <property expression="$trp:test" name="test1"/>
                <property expression="$ctx:test2" name="test2"/>
                <property expression="$ctx:test3" name="test3"/>
            </log>
            <respond/>
        </inSequence>
        <outSequence/>
        <faultSequence/>
    </resource>
</api>

Sequence:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="HeaderMediatorCall_Sequecne" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <log level="custom">
        <property name="HeaderMediatorCall_Sequecne" value="B4 *****"/>
    </log>
    <class name="com.abc.in.DuplicateHeadersMediator"/>
    <log level="custom">
        <property name="HeaderMediatorCall_Sequecne" value="after *****"/>
    </log>
</sequence>

Kindly clarify my doubts mentioned below.

  1. how can I recover default logging mechanism since this change made product logging weird, so that artifacts like API, Sequence etc and server logs i'll get properly
  2. why class mediator logs are not getting printed initially or how can i get those class mediators log in wso2 ei server 6.5.0

Solution

  • I have used java.util.logging.Logger to reflect logger inside class mediator. Still not sure why org.apache.commons.logging.LogFactory not printing anything in log.

    import java.util.logging.Logger;
    
    public class ParseEmailBody extends AbstractMediator {
    
    private static final Logger logger = Logger.getLogger(ParseEmailBody.class.getName());
    
    
    public boolean mediate(MessageContext context) {
    logger.info("===Inside ParseEmailBody Class Mediator===");
    
    return true;
    }