为什么日志在我的WSO2自定义消息处理器实现中不起作用?

问题描述:

我很新WSO2 ESB我试图做一些初步的实验,建立一个自定义消息处理器。我基本上创建了一个项目,我在其中定义了一个扩展抽象类的类。这是一个非常简单的实验,所以在这个时候我只重写一些方法在里面放一些日志。为什么日志在我的WSO2自定义消息处理器实现中不起作用?

看来我的应用程序可以正常工作,而且这个自定义消息处理器被使用了,我无法读取插入的日志到我的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()(出于同样的原因)。

正如你可以看到我尝试使用日志记录器实例,但也使用简单的System.out.println()把日志。

我建立它生成jar文件,我上传这个罐子里面WSO2 EI管理面板:ESB文物 - >添加

然后我想在我的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)。

我的应用程序似乎正常工作(所以我认为这是使用这种自定义消息处理器,我希望它),但是插入初始化日志()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;