Java Mule:拦截任何类型的日志记录并将消息添加到列表中

Java Mule:拦截任何类型的日志记录并将消息添加到列表中,java,logging,mule,Java,Logging,Mule,在整个流程中,我都有一个“logger”组件,它将重要消息写入日志。Mule本身也在输出“信息”和“错误”日志信息,这对于我的应用程序的另一部分很重要。现在,我想在流执行完成后将所有日志消息发送到另一个应用程序。我认为正确的方法是创建一个拦截器,将消息作为流变量添加到列表集中,并在流执行结束时发送出去。但我也希望自定义组件Java代码中的logger.debug()、logger.info()也被添加到列表中并发送出去 使用拦截器是这样做的正确方法吗?我会尝试一种更简单的方法,在流结束时,向vm

在整个流程中,我都有一个“logger”组件,它将重要消息写入日志。Mule本身也在输出“信息”和“错误”日志信息,这对于我的应用程序的另一部分很重要。现在,我想在流执行完成后将所有日志消息发送到另一个应用程序。我认为正确的方法是创建一个拦截器,将消息作为流变量添加到列表集中,并在流执行结束时发送出去。但我也希望自定义组件Java代码中的logger.debug()、logger.info()也被添加到列表中并发送出去


使用拦截器是这样做的正确方法吗?

我会尝试一种更简单的方法,在流结束时,向vm发送消息以读取日志文件,另一个流将侦听此vm端点并开始读取日志。将其保存在单独的流中将使我们能够更好地控制日志文件以读取不同类型的消息。

您可以在应用程序的log4j配置中配置不同的appender。这允许您将JMS用作追加器。

另一种选择是使用Mule服务器通知,只考虑流经消息处理器的消息:

所以你建议读取日志文件?但是我希望每个消息都是一个列表,那么这是否意味着我必须读取一个文本文件并以某种方式再次“解析”它以分别获取每个消息?我如何知道日志文件中的消息是针对给定的流执行(针对给定的负载)的与几乎同时处理的另一个有效负载相反,我发现了一篇关于日志拦截器的有趣文章,这篇文章看起来很有希望:但是我想知道是否有一种方法可以将日志拦截器不绑定到一个组件,而是绑定到整个流。我正在研究这个解决方案。但是,在使用appender时,我需要访问有效负载中的值。这可能吗?我需要将日志消息保存在内存中,直到流的最后一个组件,并且我希望能够将一个流执行的日志与另一个流执行的日志分离(不同的有效负载值)。在我的有效负载中,我有一个值“identifier”,它是当前发送的有效负载的自定义唯一标识符。我希望在内存中有一个hashmap,标识符作为键字符串,日志消息的字符串列表。我目前遇到的问题是用appender获取变量。我不确定这是否可行。那么看看服务器通知替代方案。您可以使用bean作为侦听器,并在那里添加所需的任何逻辑。