自写的GLLog Framework
公良奇
2023-12-01
之前自己在多个项目中总结了一个log framework,暂时就叫GLLog吧。我觉得很多跟AS3相关的,特别是flex或AIR,需要一个log framework来定义输出信息。flex framework本身也带了个,就是稍显简单。 既然讲到定义输出信息,就不得不考虑目标的多样性,比如trace,普通文本,TextArea,XML,或者远程计算机等等。数是数不过来的,这就需要分离具体实现。 不过在实践过程中,我还发现,输出目标和文本格式最好也分离。比如一行一行的log信息,既可以放到文本文件里,也能显示在TextArea组件中;又如XML格式的log,可以放到本地XML文件,也可以作为dataprovider绑定到某个flex组件中。除此以外,还有一个好处就是,可以将存储和显示分离。格式化的log信息被存储在内存中,按照用户需要才显示或者写入文件。 为了做到让GLLog framework尽量简单和通用,我决定将输出目标排除在外(毕竟种类太过繁多),只提供获得格式化log的接口。 下面是GLLog framework的一个大致结构。 接口GLIWriter就定义了格式化方式(它将会被添加到GLLog并负责格式化信息)。以我自己写的GLPureWriter为例,它的作用就是把log一行一行的窜成字符串(注意:并没有声明输出到哪里)。 package org.gainloss.log { import flash.events.Event; import flash.events.EventDispatcher; /** * only pure list */ public class GLPureWriter extends EventDispatcher implements GLIWriter { public function GLPureWriter() { //TODO: implement function } private var _list:String = ""; public function pushMsg(msg:String):void { //TODO: implement function _list += msg+"\n" this.dispatchEvent(new Event("NEWLISTMSG")); } [Bindable(name="NEWLISTMSG")] public function get wholeMsgs():Object { //TODO: implement function return _list; } } } 如果要输出到TextArea显示,可以这么做。 <?xml version="1.0" encoding="utf-8"?> <mx:Window xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="400" height="300"> <mx:Script> <![CDATA[ import org.gainloss.log.*; [Bindable] private var writer:GLPureWriter = GLLog.getWriterInstance(GLPureWriter) as GLPureWriter; ]]> </mx:Script> <mx:VBox [...]