加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex日志详解

发布时间:2020-12-15 04:47:44 所属栏目:百科 来源:网络整理
导读:原文:http://yunzhongxia.iteye.com/blog/1150218 ?log4j对于java开发者最熟悉不过了,log4j不仅可以控制日志输出的目的地,还可以控制日志输出级别,便于调试和发布,一个好的产品需要记录很多日志便于日后的维护,尤其是产品上线之后。 ????? 在 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>??

?

?

?输入结果如下:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读