我有一个序列模板可以完成很多不同的调用。每个通话记录一些参数/信息。在WSO2中记录序列调用ESB
我想要实现的是在序列执行期间传递给所有调用的某种标识符(比方说一个唯一的ID)。
目标是跟踪日志中单个执行的所有步骤,主要用于调试目的。
其实我唯一想到的就是做这个programmaticaly,比如说,在序列的开头创建一个uid,传递它并将它保存在日志调用中。 我也试图搞乱LogMediator,使它从外部参数自动提取信息,但失败(也许我做错了)。
有没有更聪明的方法来做到这一点?
我有一个序列模板可以完成很多不同的调用。每个通话记录一些参数/信息。在WSO2中记录序列调用ESB
我想要实现的是在序列执行期间传递给所有调用的某种标识符(比方说一个唯一的ID)。
目标是跟踪日志中单个执行的所有步骤,主要用于调试目的。
其实我唯一想到的就是做这个programmaticaly,比如说,在序列的开头创建一个uid,传递它并将它保存在日志调用中。 我也试图搞乱LogMediator,使它从外部参数自动提取信息,但失败(也许我做错了)。
有没有更聪明的方法来做到这一点?
您的需求可以通过各种方式实现。我提到了其中的一种可能性。
由于这是一个额外的方法,您将用于调试目的,我认为最好有一个单独的日志文件用于此目的。因此,首先创建一个类似于下面给出的文件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
感谢Upul的提示答案!是不是每次调用MessageContext都会改变?在这种情况下,因为我在序列中有很多调用,每个调用都会有不同的uid,所以我将无法追溯整个序列。我对吗? – Sibby
@Sibby yes MessageContext在每次调用时都会更改,但您将uid传递给CustomDebug调解器,它将记录uid +其他详细信息。 (我已经更新了我的答案,请看看它) –
谢谢。我要去尝试一下 – Sibby