Flex本身自带了一套日志API,但是这个日志太死板了,针对不同操作系统,日志路径还不一样,并且日志文件中的日志每次都刷新掉了
(我是在Win7下的,之前一直找不到appData这个文件夹,后面才发现这个文件夹隐藏了)
所以后面就找到了slf4fx这个日志框架,功能还比较强大,也比较符合自己,因为自己本身是做java的,控制台一开,就像linux下那样打印日志,
它的大致流程就是,服务器开一个监听Socket的端口,然后在flex中获取sfl4fx引用,再将日志通过Socket发送到服务器,服务器再显示出来
下面是具体使用方法
下载地址:https://code.google.com/p/slf4fx/downloads/list
下载完之后解压到一个目录,如下图
这个就是slf4fx的服务器了,注意一点(你需要安装java环境,因为服务器是java开发的)
下载完之后怎么使用呢?
1.首先你可以看下lib目录下有个 slf4fx_client.swc文件,将这个文件引入到你的flashbuilder的web工程,怎么引入应该知道吧,不知道自己查下
2.然后在你的工程初始化那里加上对这个框架的支持
3.打开 slf4fx.cmd运行服务,你也可以用java -jar 目录/slf4fx-server-deps.jar运行,然后再打开你的web,就有日志打印到命令台了
上面只是说明相关步骤
下面看具体使用方法:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600" initialize="init()">
<fx:Script>
<![CDATA[
import logging.Logging;
import mx.logging.ILogger;
import mx.logging.Log;
import mx.logging.LogEventLevel;
import org.room13.slf4fx.Slf4FxLoggingTarget;
//获取sfl4fx日志的引用
private var _log : ILogger = Log.getLogger("org.room13.slf4fx.MyApplication");
private function init() : void {
//myApplication是在命令台显示的应用名称
//mySecret用于验证
Log.addTarget(new Slf4FxLoggingTarget("myApplication", "mySecret"));
}
private function generateMXMLLogRecords() : void {
//level={0} {1} 表示后面参数在命令台的输出位置,如第一个,把{1}放在前面,那就说明
//输出"**DEBUG**"LogEventLevel.DEBUG
_log.debug("level={1} {0}", LogEventLevel.DEBUG, "**DEBUG**");
_log.info("level={0} {1}", LogEventLevel.INFO, "**INFO**");
_log.warn("level={0} {1}", LogEventLevel.WARN, "**WARN**");
_log.error("level={0} {1}", LogEventLevel.ERROR, "**ERROR**");
_log.fatal("level={0} {1}", LogEventLevel.FATAL, "**FATAL**");
Log.flush();
}
]]>
</fx:Script>
<s:HGroup>
<s:Button label="日志输出" x="20" y="20" click="generateMXMLLogRecords()"/>
</s:HGroup>
</s:Application>
你先运行
slf4fx.cmd打开服务,然后再运行程序,点击按钮,就可以在命令台看到相关输出内容了
网上仅有的几篇关于flex slf4fx日志框架的博客写的内容跟我上面差不多,但是还有一些知识,请看下面:
当我这样配置成功的时候,觉得很赞了,因为我可以看到日志了。但是没过一会儿,就提示 服务器session关闭,我还得重新开
这多难为情啊,后来看启动日志里面有句 session timeout:60 seconds,意思就是说session60秒之后就关闭了,于是在刚刚解压的哪个目录下一直翻
看下有没有什么配置文件可以配置这个session值的,真是每个文件都翻遍了,jar包里面也打开看了,硬是没找到,后来还是在slf4fx主页中找到了方法
usage: java -jar slf4fx-server.jar [OPTIONS]
SLF4Fx simple server
-b,--bind <ADDRESS[:PORT]> bind SLF4Fx server to this address
-d,--disable-policy disable any socket policy for Adobe Flash
Player
-h,--help print this message
-k,--known-applications <FILE> known applications descriptor file(one pair
APPLICATION=SECRET per line)
-p,--policy-file <FILE> socket policy file for Adobe Flash Player
-r,--reader-buffer-size <BYTES> protocol decoder buffer size
-t,--session-timeout <TIMEOUT> session timeout in seconds
java -jar slf4fx-server-deps.jar --help,可以显示上面的帮助命令,意思后面都有,就不想翻译了,英文不好
所以我们就可以 这样来运行 java -jar slf4fx-server-deps.jar -t 18000 就设置半小时吧,这下就再也不用担心session关闭了
也可以用编辑器打开slf4fx.cmd,在后面添加 -t 18000,保存,再运行,可以看到控制台的session timeout 改为18000 seconds了
再提下关于slf4fx在程序中的使用问题,在上面例子主程序中
private var _log : ILogger = Log.getLogger("org.room13.slf4fx.MyApplication");
大家可以把private改成public,然后在其他组件或者是as文件也可以使用,使用方法:
FlexGlobals.topLevelApplication._log.info("level={0} {1}", LogEventLevel.INFO, "log信息");
将程序部署到tomcat,日志也会发送到slf4fx服务器,所以使用还是很方便的,对于是java程序员来说。
请注明:http://blog.csdn.net/songanling/article/details/22863529