Flex集成一个Log框架,可以完成很多用trace()做debug时完成不了的功能输 出log时可以实现分等级(共5+1级),用过滤器指定输出的类,以及输出方式(默认为 trace)。
需要用到的类如下
TraceTarget:继承AbstractTarget,该类提供使用全局trace()方法输出日志消息的记录程序目标。
Log:主类,有几个静态方法,添加/移除 TraceTarget和获取ILogger。
LogEventLevel:定义了log等级的常量。
Log等级说明:5级 和 All
分别是ALL(0) DEBUG(2) INFO(4) WARN(6) ERROR(8) FATAL(1000)
每 个等级在输出时都包含了自身及后续等级的信息,即当把等级设定为INFO时,INFO WARN ERROR FATAL中的信息都会被输出,而排在INFO前面的DEBUG则不会被输出
example :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
width="100%"
height="100%"
creationComplete="init()">
<mx:Script>
<![CDATA[
import com.commons.STraceTarget;
import mx.logging.Log;
import mx.logging.LogEventLevel;
import mx.logging.LogLogger;
private var logger:LogLogger
private function init():void
{
var logTarget:STraceTarget;
logTarget = new STraceTarget(); //继承TraceTarget
logTarget.filters = ["com.*"];
logTarget.level = LogEventLevel.ALL;
logTarget.includeCategory = true; //输出信息是否包含class名
logTarget.includeLevel = true; //输出信息是否包含等级
logTarget.includeDate = false; //输出信息是否包含日期
logTarget.includeTime = false; //输出信息是否包含时间
logger = Log.getLogger("Test") as LogLogger; //此处getLogger参数只是作为标志位使用,如果此处写为 com.Test(com包下面并没有Test类)也可以输出日志信息,详细可参考getLogger方法
//logTarget.addLogger(logger); //使用指定的记录程序设置此目标
Log.addTarget(logTarget); //允许指定的目标开始接收日志事件的通知。
}
private function logMessage():void
{
logger.debug(":debug......");
logger.info(":info......");
logger.error(":error......");
}
]]>
</mx:Script>
<mx:Button label="add Message" click="logMessage()" />
</mx:Application>
此处STraceTarget继承TraceTarget:
package com.commons
{
import mx.controls.Alert;
import mx.core.mx_internal;
import mx.logging.targets.TraceTarget;
use namespace mx_internal;
public class STraceTarget extends TraceTarget
{
public function STraceTarget()
{
super();
}
/**
* 由该方法输出日志,可以重写此方法以实现将日志写入服务器(需要服务支持),或者将日志写入本地
*/
override mx_internal function internalLog(message:String):void
{
Alert.show(message);
}
}
}