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

Why the log is not working in my WSO2 custom message processor implementation?

我是 WSO2 ESB 的新手,我正在尝试构建一个 自定义消息处理器 。我基本上创建了一个项目,在其中我定义了一个扩展 WSO2 SamplingProcessor 抽象 class 的 class。这是一个非常简约的实验,所以此时我只是重写了一些方法,将一些日志放在里面。

我的应用程序似乎可以正常工作,并且使用了这个自定义消息处理器我无法将插入的日志读入我的 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 消息处理器 class:

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 文件,我在 WSO2 EI 管理面板中上传了这个 jar: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>

如您所见,我用自定义消息处理器 (com.mycompany.toolkit.messageprocessor.SamplingProcessorHeaderRateLimitation).

我的应用程序似乎工作正常(所以我认为它正在使用这个自定义消息处理器,我希望如此)但是日志插入到 init()setParameters() 方法没有打印到我的日志文件中 (wso2carbon.log).

为什么?可能是什么问题?我错过了什么?

我在调用我的 WSO2 ESB API 之后检查日志,所以我只能看到调用 API 之后发生的事情(我在日志上做一个 unix tail)。

会不会这2个重写的方法只在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;