2011-04-24 48 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