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