2016-05-13 90 views
0

我有一个序列模板可以完成很多不同的调用。每个通话记录一些参数/信息。在WSO2中记录序列调用ESB

我想要实现的是在序列执行期间传递给所有调用的某种标识符(比方说一个唯一的ID)。

目标是跟踪日志中单个执行的所有步骤,主要用于调试目的。

其实我唯一想到的就是做这个programmaticaly,比如说,在序列的开头创建一个uid,传递它并将它保存在日志调用中。 我也试图搞乱LogMediator,使它从外部参数自动提取信息,但失败(也许我做错了)。

有没有更聪明的方法来做到这一点?

回答

0

您的需求可以通过各种方式实现。我提到了其中的一种可能性。

由于这是一个额外的方法,您将用于调试目的,我认为最好有一个单独的日志文件用于此目的。因此,首先创建一个类似于下面给出的文件appender。

log4j.logger.com.test.CustomDebug=DEBUG, CUSTOM_DEBUG 
log4j.additivity.com.test.CustomDebug=false 

log4j.appender.CUSTOM_DEBUG = org.apache.log4j.DailyRollingFileAppender 
log4j.appender.CUSTOM_DEBUG.File = /home/upul/log/moredebug.log 
log4j.appender.CUSTOM_DEBUG.layout = org.apache.log4j.PatternLayout 
log4j.appender.CUSTOM_DEBUG.Append = true 

接下来,创建一个名为CustomDebug的自定义介体。 mediate()里面的方法从MessageContext读取参数。接下来,进行一些处理(如果有的话),最后使用log.debug()编写日志消息。此调试消息将写入您上面创建的新文件(在这种情况下,它将是/home/upul/log/moredebug.log)。

public class CustomDebug extends AbstractMediator { 

    private static final Log log = LogFactory.getLog(CustomDebug.class); 

    public boolean mediate(MessageContext mc) { 

    } 
} 

接下来,插入CustomDebug类调​​解人您的序列模板的适当位置,并通过uid作为参数。

正如我前面提到的,这是您可以用来创建自定义日志记录的方法之一。您可能还需要查看其他可能性。

如果您需要关于此问题的进一步帮助,请让我知道。

感谢,

Upul

+0

感谢Upul的提示答案!是不是每次调用MessageContext都会改变?在这种情况下,因为我在序列中有很多调用,每个调用都会有不同的uid,所以我将无法追溯整个序列。我对吗? – Sibby

+0

@Sibby yes MessageContext在每次调用时都会更改,但您将uid传递给CustomDebug调解器,它将记录uid +其他详细信息。 (我已经更新了我的答案,请看看它) –

+0

谢谢。我要去尝试一下 – Sibby