【发布时间】: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>
请澄清我下面提到的疑问。
- 如何恢复默认日志记录机制,因为此更改使产品日志记录变得奇怪,因此 API、序列等工件和服务器日志我将正确获取
- 为什么类中介日志最初没有被打印或者我怎样才能让这些类中介日志登录 wso2 ei 服务器 6.5.0
【问题讨论】:
标签: wso2 wso2-esb wso2-enterprise-integrator