| 关于AquaLogic Enterprise Service Bus中日志扩展的实现 |
|
| 作者是 pishanshan-070628 | |
| 2008-02-03 06:57:04 | |
引言任何一个应用系统,无论其实现的功能如何,一些非功能性的需求都是系统设计人员、开发人员和系统维护人员所关心的。这些方面的需求我们通常都可以在不同的软件和应用系统中所发现,如:用户的安全管理、系统的扩展性要求(即:群集支持和容错处理)、部署支持、运行监控等等,而应用所需提供的日志记录,也是属于这一范畴。 AquaLogic Enterprise Service Bus(简称为:ESB)对于这些非功能性的需求同样提供了强大的机制来实现。下面我们来简单的讨论一下在ESB中关于日志记录的一些实现方式,以及如何能够通过扩展定制ESB中的日志记录。 ESB日志相关操作简介对于日志处理,ESB缺省的提供了一个名为Log的动作,通过该动作可以在ESB中所定义的处理流程中,添加Log动作,用于记录流程中的信息。其实与ESB可以用于日志记录的相关动作包含三种,它们分别是Alert, Log和Report:
图示:使用Log动作
图示:使用Report 动作 图示:查看Report的捕获历史记录
图示:使用Alert动作 上述三种动作是ESB中所提供的缺省的日志处理的机制,而现实中用户的需求还是有些不同的。首先用户在ESB上构建的流程处理应用可以配置独立的日志记录,以方便应用层级的管理和监控人员了解应用层面的处理状况,而且每个用户对于日志的格式和结构也多少有些差异。 这些方式为用户在ESB上扩展开发属于应用自身层面日志处理提供了一些借鉴思路,即:日志信息可以通过写文件、发送JMS消息和记录到数据库中三种方式来实现。而在ESB中实现上述三种方式有多种技术手段:
而这几种方式理论上都可以实现自定义扩展日志记录的机制,但这些方式都存在着一定不足。对于Publish和JMS方式,都需要在ESB中配置相关的Business Services,而在流程中实际上是处理应用本身的逻辑同时,还要求设计人员调用配置的这些业务服务,这一定程度上造成业务逻辑变得复杂,不方便调试和逻辑调整以及影响系统的执行效率;采用Java Call-out方式,与业务服务调用的情况类似,需要在业务流程中加入Java Call-out动作来进行日志记录。 结合Log4J,扩展ESB日志处理有鉴于此,我们希望能够在ESB中找到一种相对快捷,对开发影响小,而且更加便于配置、管理和维护的日志处理机制。Log4J对于所有Java的应用设计和开发人员而言都不是陌生的,利用Log4j我们可以对自己的程序添加所需要的日志处理,并且通过配置文件,方便我们设置和调整日志的级别和范围。 对于ESB而言,如果构建在ESB上的应用处理流程也可以使用Log4j的机制进行应用层面的日志记录,对于系统开发人员、管理人员而言是十分方便的,可以在应用的调试和应用监控方面提供有益的帮助。 下面,我们就探讨一下如何在ESB中结合Log4j,对流程处理需要日志记录的信息进行扩展的实现机制。 步骤1: 配置应用服务器,采用Log4J方式记录系统日志对于WebLogic服务器而言,提供了两种日志记录机制,一种是基于标准JDK所提供的Java Logging API方式来实现的日志记录功能,另外一种是使用Log4j日志记录方式。服务器缺省的配置都是使用Java Logging API方式来实现日志记录,因此为了能实现扩展,对于服务器首先是需要将服务器的Server日志记录方式更改为Log4j。 配置方法如下:
图示:在WebLogic Console中配置使用Log4j来记录Server日志 当重新Weblogic应用服务器启动后,WebLogic会采用Log4j的日志记录方式来记录服务器日志。这样ESB中使用Log动作所生成的日志,一样会采用Log4j方式记录到Server日志文件中。 步骤2: 配置Log4J的Filter和Appender为了能够让ESB在记录日志时,能够将ESB相关的信息从记录整个Weblogic服务器所有信息的Server.log文件中剥离,我们需要在使用Log4J配置进行定制扩展,首先我们需要定义相关的Log4J的Appender,这样可以生成与Server日志文件相独立的Appender文件来用于日志记录;然后我们需要编写一个Log4J的Subscriber,通过该subscriber接收记录到Server.log中的记录信息;最后需要定制日志的过滤器(Filter),通过该Filter将和ESB相关的信息进行过滤,并信息记录到所配置的Appender中。
参考的Log4J的Appender配置如下: <appender name="Learning" class="org.apache.log4j.RollingFileAppender">
具体过滤的条件如下: 首先是只接收ESB相关的日志,Weblogic中ESB相关的日志都包含“ALSB Logging”的标识,然后再根据自身业务需要配置定义其他的过滤条件,如“日志的等级”或其他过滤的标识符等。 Filter的示例代码如下:
public class LogFilter extends Filter{
3、通过weblogic.logging.log4j.Log4jLoggingHelper类的getLog4jServerLogger()方法来从Server端的日志框架中获取Logger,并配置Filter后,为每个Logger增加Appender。 public class Log4jController {
图示:配置Startup Class 图示:启动后,相关Log4j的Appender被加载 步骤3: ESB中使用扩展的Log动作在ESB中,你可以制订不同的过滤策略,前面的示例中,我们采用的是基于ESB中每个项目定制Appender和Filter的策略。 使用时,进入ESB配置界面(http://localhost:7001/sbconsole),相应的对每个ESB Project中的Proxy Service流程中,在需要记录日志的位置,采用ESB中标准的Log动作来完成。为了能够让日志信息写入我们扩展的日志配置文件中,我们需要在”with Annotation”的输入框中加入Log4j 配置文件中为该项目所定义的Appender的名称。 图示:ESB中配置Log动作,并加入过滤条件 进入ESB的测试页面,测试我们刚刚配置的Proxy流程,输入流程所需要的数据并提交。 图示:测试ESB中的Proxy流程 此时我们可以查看Weblogic Console中是否记录了我们所提交的信息, 图示:Server Console中显示的日志信息 然后在使用任何文本编辑器打开我们所配置的Appender所指定的日志文件,查看是否有ESB流程中所对应的日志信息。 图示:自定义日志文件中的记录 通过上述步骤,我们可以发现,通过WebLogic/AquaLogic ESB与Log4J的结合,为我们在ESB应用开发中提供了一种扩展的日志处理机制,该机制一方面利用ESB已有的日志处理能力,同时也为我们自己管理和监控应用相关的信息提供了一种便捷、快速的方式。 参考文档:
|
|
| 最近更新 ( 2008-02-03 06:57:04 ) |












