【问题标题】:Logging is not functioning properly after changing Logging Configuration via managemnt console in WSO2 EI 6.5.0通过 WSO2 EI 6.5.0 中的管理控制台更改日志记录配置后,日志记录无法正常运行
【发布时间】:2022-10-23 23:37:01
【问题描述】:

我已经开发了通过 WSO2 EI 6.5.0 中的序列调用类中介的 API。最初,API 日志正在打印,但服务器日志中的类中介日志除外。

为了根据this 启用类调解器的日志,我登录到管理控制台Home> Configure> Logging 部分并转到Configure Log4J Loggers 部分,搜索我在类调解器中添加的任何日志关键字以找出类调解器并将类级别更改为@987654328 @

发布此更改,当我通过邮递员调用服务时没有打印任何内容,但获取 API 响应。我刚刚重新启动服务器,发布此管理控制台 url 也没有打印在服务器日志中。

下面是管理控制台日志记录配置图像以供参考。

班级调解员:

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;
                }
            }
        }
    }
    
    
}

接口:

<?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>

序列:

<?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>

请澄清我下面提到的疑问。

  1. 如何恢复默认日志记录机制,因为此更改使产品日志记录变得奇怪,因此 API、序列等工件和服务器日志我将正确获取
  2. 为什么类中介日志最初没有被打印或者我怎样才能让这些类中介日志登录 wso2 ei 服务器 6.5.0

【问题讨论】:

    标签: wso2 wso2-esb wso2-enterprise-integrator


    【解决方案1】:

    当您扩展AbstractMediator 时,您应该已经有一个记录器实例供您使用。检查here。所以你不必实例化一个新的 Logger。您可以简单地使用现有的记录器。

    【讨论】:

    • 嗨@ycr,感谢您的回复,我刚刚在我的机器(windows 10)中安装了新的 WSO2 EI 6.5.0。根据您的建议重用日志并删除了类调解器内新记录器的实例化,发布此类调解器日志也不是打印,API 等剩余日志,仅打印序列。 log4j.properties 文件中是否需要进行任何其他更改才能启用类调解器日志?
    • @Justin 通常它会被自动拾取。如果没有,您可以将类中介器的日志配置添加到 log4j.properties 文件中。
    【解决方案2】:

    我使用java.util.logging.Logger 来反映类调解器中的记录器。仍然不确定为什么org.apache.commons.logging.LogFactory 没有在日志中打印任何内容。

    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;
    }
    

    【讨论】:

    • 如果其他人提到这个,不建议这样做。您不应该在类中介中使用不同的日志框架。为了简化这一点,Abstract 类已经为您提供了一个记录器实例。
    猜你喜欢
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    相关资源
    最近更新 更多