[英]WSO2 Api Manager 3.2 - Custom Handler, no log in file, handler not working
[英]Why the log is not working in my WSO2 custom message processor implementation?
我在WSO2 ESB中还很陌生 ,我正在尝试做一些初步的实验来构建自定义消息处理器 。 我基本上创建了一个项目,在其中定义了扩展WSO2 SamplingProcessor抽象类的类。 这是一个非常简单的实验,因此目前我仅覆盖将某些日志放入其中的某些方法。
看来我的应用程序正常工作,并且使用了此自定义消息处理器,我无法将插入的日志读到wso2carbon.log日志文件中。
我以这种方式做:
1)我创建了一个新的Maven项目,并使用了这个pom.xml文件,该文件应符合构建自定义消息处理器的要求:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.toolkit</groupId>
<artifactId>SamplingProcessorHeaderRateLimitation</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>bundle</packaging>
<name>Sampling Processor Header Rate Limitation</name>
<description>Custom Sampling Mesageprocessor using response header to implement the rate limitation</description>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.3.4</version>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>com.mycompany.toolkit.messageprocessor</Bundle-SymbolicName>
<Bundle-Name>com.mycompany.toolkit.messageprocessor</Bundle-Name>
<Export-Package>com.mycompany.toolkit.*</Export-Package>
<DynamicImport-Package>*</DynamicImport-Package>
<Implementation-Build>${buildNumber}</Implementation-Build>
<Scm-Root>${project.scm.connection}</Scm-Root>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<releases>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<id>wso2-nexus</id>
<url>http://maven.wso2.org/nexus/content/groups/wso2-public/</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<releases>
<updatePolicy>daily</updatePolicy>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<id>wso2-nexus</id>
<url>http://maven.wso2.org/nexus/content/groups/wso2-public/</url>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>org.apache.synapse</groupId>
<artifactId>synapse-core</artifactId>
<version>2.1.7-wso2v3</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
<properties>
<CApp.type>lib/synapse/mediator</CApp.type>
</properties>
</project>
2)然后创建了这个SamplingProcessorHeaderRateLimitation ,它是我的自定义消息处理器实现,并且扩展了SamplingProcessor WSO2消息处理器类:
package com.mycompany.toolkit.messageprocessor;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.SynapseException;
import org.apache.synapse.core.SynapseEnvironment;
import org.apache.synapse.message.processor.impl.ScheduledMessageProcessor;
import org.apache.synapse.message.processor.impl.sampler.SamplingProcessor;
import org.apache.synapse.message.processor.impl.sampler.SamplingProcessorView;
public class SamplingProcessorHeaderRateLimitation extends SamplingProcessor {
private static final Log logger = LogFactory.getLog(ScheduledMessageProcessor.class.getName());
private SamplingProcessorView view;
@Override
public void init(SynapseEnvironment se) {
super.init(se);
logger.info("init() START");
System.out.println("init() START");
try {
view = new SamplingProcessorView(this);
} catch (Exception e) {
throw new SynapseException(e);
}
// register MBean
org.apache.synapse.commons.jmx.MBeanRegistrar.getInstance().registerMBean(view,
"Message Sampling Processor view", getName());
logger.info("init() END");
System.out.println("init() END");
}
@Override
public void setParameters(Map<String, Object> parameters) {
logger.info("setParameters() START");
System.out.println("setParameters() START");
// TODO Auto-generated method stub
super.setParameters(parameters);
logger.info("setParameters() END");
System.out.println("setParameters() END");
}
}
如您所见,我重写了init()之类的一些方法(因为我认为它只执行一次,但是何时执行?)和setParameters() (出于相同的原因)。
如您所见,我尝试使用Log logger实例但也使用简单的System.out.println()放置日志。
我将其构建为生成jar文件,并将此jar上传到WSO2 EI管理面板中: ESB Artifacts-> Add 。
然后,我尝试在ESB应用程序中使用此自定义消息处理器,以这种方式配置此消息处理器:
<?xml version="1.0" encoding="UTF-8"?>
<!---<messageProcessor class="org.apache.synapse.message.processor.impl.sampler.SamplingProcessor" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">-->
<messageProcessor class="com.mycompany.toolkit.messageprocessor.SamplingProcessorHeaderRateLimitation" messageStore="transferFromMessageStore" name="transferFromMessageProcessor" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="sequence">transferProcessorSequence</parameter>
<parameter name="interval">1000</parameter>
<parameter name="is.active">true</parameter>
<parameter name="concurrency">1</parameter>
</messageProcessor>
如您所见,我将标准的org.apache.synapse.message.processor.impl.sampler.SamplingProcessor消息处理器(此ESB应用程序以前使用)替换为我的自定义消息处理器( com.mycompany.toolkit.messageprocessor.SamplingProcessorHeaderRateLimitation )。
我的应用程序似乎运行良好(我希望它正在使用此自定义消息处理器),但是插入init()和setParameters()方法的日志未打印到我的日志文件( wso2carbon.log )中。
为什么? 这可能是什么问题? 我想念什么?
在调用WSO2 ESB API之后,我会检查日志,以便我只能看到调用该API之后发生的事情(我正在日志上执行unix尾部操作)。
可能仅在Carbon服务器启动时或在部署ESB应用程序时才执行这两种覆盖的方法吗?
最终,我可以重写哪种消息处理器方法来测试日志? (我的意思是每次我的自定义消息处理器执行其相关序列时都会调用的方法)
我认为它执行一次,但是什么时候? -在初始化过程中,我认为这是在您编辑某些MessageProcessor并按保存按钮时发生的,您会注意到类似
[2017-07-20 13:45:41,477] [] INFO - ScheduledMessageProcessor Started message processor. [meneriade]
关于记录
logger.info("init() START");
您检查过log4j.properties了吗? 您有自定义软件包名称
package com.mycompany.toolkit.messageprocessor;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.