Flex日志详解



原文:http://yunzhongxia.iteye.com/blog/1150218


 log4j对于java开发者最熟悉不过了,log4j不仅可以控制日志输出的目的地,还可以控制日志输出级别,便于调试和发布,一个好的产品需要记录很多日志便于日后的维护,尤其是产品上线之后。
      在 Flex中也提供了这样的一个框架,Logging API就是最基本的日志控制框架,只不过大部分的人都在用最简单的trace()函数罢了,类似于js开发常用的alert。
      Logging API不仅提供了最基本的trace功能,还提供了log target,也就是输出的方式,还提供了destination目的地的配置功能。我们可以根据日志范围过滤掉一些信息。除此之外还可以进行自定义log target,对框架进行扩展,例如我们可以把log信息输出到服务器端或者Alcon等。

     

      下面先来看下Logging API主要类的UML关系图。

 

     

LogLogger: 提供了发送log到一个特定target,它实现了ILogger接口。
      

 

      

 
AbstractTarget:定义了日志的输出地。TraceTarget就是将log输出到trace()函数输出的文件中,也就是flashlog.txt文件中,很多时候我们需要扩展日志输出地满足架构的需求,因为flashlog文件有大小限制,而且输出的日志会覆盖上次的日志。

 

 

LogEventLevel:定义了当前系统可输出的日志级别。

如下表所示。如果现在的level是ALL,那么系统中所有的日志都会被输出。如果是INFO,那么高于INFO的DEBUG信息就不会被输出。一般开发测试的时候级别为DEBUG或者INFO,上线之后调整为ERROR。另外,注意一点FATAL的值为1000,很符合扩展性的需求。这种设计理念在实际项目中经常会用到。

 

 

 

log target 过滤filters
      logTarget.filters=["mx.rpc.*","mx.messaging.*"];
这个例子中就是指定了我们要输出日志的类和包。只有在mx.rpc和mx.messaging包下的类才能输出log,忽略其他的。也可以是mxml形式:

 

    

Java代码   收藏代码
  1. <mx:TraceTarget id="logTarget" includeDate="true" includeTime="true"  
  2.                   includeCategory="true" includeLevel="true">  
  3.             <mx:filters>  
  4.                   <mx:Array>  
  5.                         <mx:String>mx.rpc.*</mx:String>  
  6.                         <mx:String>mx.messaging.*</mx:String>  
  7.                   </mx:Array>  
  8.             </mx:filters>  
  9.            <!-- 0 is represents the LogEventLevel.ALL constant. -->  
  10.            <mx:level>0</mx:level>  
  11. </mx:TraceTarget>  

 

参数介绍
 includeDate="true",输出的log带日期
 includeTime="true", 输出的log带时间
 includeCategory="true",输出的log带分类信息,也就是哪个类或者控件输出的log
 includeLevel="true",输出的log是否带level信息,如[INFO],[DEBUG]等。

 

 Flex提供的log功能如此强大,你是不是想跃跃欲试呢?但是flash并不是那么“完美”,需要完美做以下工作才可以进行log实战。

 Flex的日志可以分为前端日志和后端日志,我们先来了解下前端日志。

 

 logging日志文件

 

     首先要配置mm.cfg文件,如果没有可以自己创建一个,该文件根据操作系统的不同位置也会不同,详见下表格

    

 

    在mm.cfg文件中写入:

      

Java代码   收藏代码
  1. ErrorReportingEnable=1  
  2. TraceOutputFileEnable=1  
  3. MaxWarnings=0  

 

   ErrorReportingEnable
   如果值为1,则在导出文件中写入错误报告。默认值为0
   MaxWarnings
   写入到log文件中的最大的错误条数。如果希望不限制错误条数,将其值设置为0即可
   TraceOutputFileEnable
   值为1则将trace内容导出到log文件
   TraceOutputFileName
   导出的log文件的路径和文件名,如果不定义,则会将log内容写入到mm.cfg文件相同目录下的flashlog.txt

 

 

   配置完mm.cfg文件后,会自动根据TraceOutputFileName生成一个日志文件,默认路径详见下表格:

 

      

 

  

日志文件配置完毕,我们就可以测试了,但是我们先来了解下几种记录日志的方法。
 
(1) Flex Trace
   我们可以直接在代码中使用Trace方法向FlashLog.txt文件输出log消息。但Trace只能在Flash Debug Player中执行,客户的电脑上一般不是Debug版本,因此最好少用甚至不用Flex Trace来记录日志为好。
 
(2)  FlashTracer Firefox Plugin 
   这是一个相当好用的Firefox插件,可以在Firefox浏览器中实时跟踪log输出,非常利于调试。缺点就是必须用火狐浏览器进行测试,与浏览器耦合性比较大。
 
(3) Flex Logging API

   Flex 提供了一套非常好用的Logging API, 分别在SDK包mx.logging, mx.logging.target和mx.logging.error下。有兴趣的朋友可以去Adobe LiveDoc了解一下其详细用法。

 

  下面是一个简单的测试例子:

 

Java代码   收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.                xmlns:s="library://ns.adobe.com/flex/spark"  creationComplete="init()"  
  4.                xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">  
  5.     <fx:Declarations>  
  6.         <!-- 将非可视元素(例如服务、值对象)放在此处 -->  
  7.           
  8.     </fx:Declarations>  
  9.     <fx:Script>  
  10.         <![CDATA[  
  11.             import mx.logging.LogLogger;     
  12.             import mx.logging.ILogger;     
  13.             import mx.logging.Log;     
  14.             import mx.logging.LogEventLevel;     
  15.             import mx.logging.targets.TraceTarget;     
  16.             private var logger:ILogger;     
  17.             private function init():void{     
  18.                 var logTarget:TraceTarget = new TraceTarget();     
  19.                 logger = new LogLogger("testlog");     
  20.                 logTarget.filters = ["*"];     
  21.                 logTarget.level = LogEventLevel.ALL;     
  22.                 logTarget.includeCategory = true;     
  23.                 logTarget.includeDate = true;     
  24.                 logTarget.includeLevel = true;     
  25.                 logTarget.includeTime = true;     
  26.                 logTarget.addLogger(logger);     
  27.                 Log.addTarget(logTarget);     
  28.                           //trace("create complete");     
  29.             }     
  30.             private function clickBtn():void{     
  31.                 logger.debug("It's the debug");     
  32.                 logger.info("It's the info");     
  33.                 logger.warn("It's the warn");     
  34.                 logger.error("It's the error");     
  35.                 logger.fatal("It's the fatal");  
  36.                   
  37.                 trace("ceshi dasdasd我来侧四下");  
  38.                   //trace("It's the first click on btn");     
  39.             }     
  40.           
  41.         ]]>  
  42.     </fx:Script>  
  43.     <mx:Button id="btn" label="OK" click="clickBtn()"/>     
  44. </s:Application>  

 

 

 输入结果如下:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值