2011-04-24 44 views
0

我在Flex 3中開發了我的應用程序前端。 對於日誌記錄,我們有時會使用跟蹤和記錄器,但我們沒有特定的方式將日誌存儲在用戶機器的本地文件中。在Flex中記錄到本地文件

事實上,我從Adobe livedocs學到的是,flashplayer自己管理flashlog.txt文件中的所有日誌。

有沒有其他辦法可以維護一份日誌?每次我們執行「註銷」時,flashlog.txt都會被清除。

+0

有經驗的人,請幫我解決這個問題。 – Miral 2011-04-28 10:06:52

回答

3

您還沒有提到您的應用程序是桌面應用程序還是基於瀏覽器。

在你可以寫一個新類的桌面應用程序的情況下,

import mx.core.mx_internal; 
use namespace mx_internal; 

public class LoggingFileTarget extends LineFormattedTarget { 
     private const DEFAULT_LOG_PATH:String = "C:/mylogfile.txt"; 

     private var log:File; 

     public function LoggingFileTarget(logFile:File = null) { 
      if(logFile != null) { 
       log = logFile; 
      } else { 
       log = new File(DEFAULT_LOG_PATH); 
      } 
     } 

     public function get logURI():String { 
      return log.url; 
     } 

     mx_internal override function internalLog(message:String):void { 
      write(message); 
     }   

     private function write(msg:String):void {    
      var fs:FileStream = new FileStream(); 
      try { 
       fs.open(log, FileMode.APPEND); 
       fs.writeUTFBytes(msg + "\n"); 
       fs.close(); 
      } catch(e:Error) { 
       trace("FATAL:: Unable to write to log file."); 
      } 
     } 

     public function clear():void { 
      var fs:FileStream = new FileStream(); 
      fs.open(log, FileMode.WRITE); 
      fs.writeUTFBytes(""); 
      fs.close();      
     } 
    } 

在基於瀏覽器的應用程序的情況下,可以隨時寫:到內存中的串,或到本地共享對象。使用共享的本地對象,繼續附加到日誌,然後通過Web調用進行整理。

+0

這是否意味着我應該在Shared對象中維護一個字符串,然後以一定的時間間隔將它發送到服務器並清除它,因爲Shared Object也具有內存限制? – Miral 2011-06-15 04:29:31

+0

對於Flex應用程序,是的!這就是我看到許多Flex應用程序正在使用的方法。 – sangupta 2011-07-19 16:23:52

+0

爲了使'mx_internal覆蓋函數internalLog()'工作,我必須將其更改爲'覆蓋mx_internal函數internalLog'並添加'import mx.core.mx_internal;使用命名空間mx_internal;'到類的頭部 – 2013-07-12 11:52:32