[英]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.