2011-09-01 35 views
0

我正在尋找在我的Flex 4.5項目中記錄消息的可能性。這應該涵蓋remoteClasses,errorHandler或手動輸入消息中的錯誤消息。 閱讀了很多網頁之後,來自parslay的解決方案看起來不錯。無論如何,我想切換到這個框架。Flex和歐芹記錄

好處是可以在運行時配置日誌記錄行爲。但我不明白這些文檔。也許是因爲我是歐芹的全新品牌。谷歌也沒有合適的結果。

您是否已經完成了這項工作,並且可以給我一些代碼片段。 非常感謝

弗蘭克

編輯: 由於J_A_X合理的批評,我添加了我的代碼,因爲我已經部分成功。

首先我們需要一個配置文件,因爲我想在運行時配置日誌記錄行爲。這是項目根目錄中的一個簡單的xml文件。

<?xml version="1.0" encoding="UTF-8"?> 
<objects 
    xmlns="http://www.spicefactory.org/parsley" 
    xmlns:log="http://www.spicefactory.org/parsley/flex/logging" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.spicefactory.org/parsley 
     http://www.spicefactory.org/parsley/schema/2.3/parsley-core.xsd 
     http://www.spicefactory.org/parsley/flex/logging 
     http://www.spicefactory.org/parsley/schema/2.3/parsley-logging-flex.xsd" 
    > 

    <log:target level="info" type="components.SocketTarget"> 

    </log:target> 

</objects> 

這是我的應用程序:

<?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="onAppInitiallize(event)" 
       xmlns:parsley="http://www.spicefactory.org/parsley" 
       > 
    <fx:Script> 
     <![CDATA[ 
      import mx.controls.Label; 
      import mx.events.FlexEvent; 
      import mx.logging.Log; 

      import org.spicefactory.lib.logging.LogContext; 
      import org.spicefactory.parsley.flex.logging.FlexLoggingXmlSupport; 

      protected function onAppInitiallize(event:FlexEvent):void 
      { 
       FlexLoggingXmlSupport.initialize(); 
       LogContext.getLogger(this); 
       //Log.getLogger("myCat").info("MyInfo"); 
      } 

      protected function button1_clickHandler():void 
      { 
       Log.getLogger(this.toString()).info("myMessage"); 
       Log.getLogger(this.toString()).fatal("myMessage"); 


      } 

     ]]> 
    </fx:Script> 
    <fx:Declarations> 
     <parsley:ContextBuilder> 
      <parsley:XmlConfig file="config.xml"/> 
     </parsley:ContextBuilder> 
    </fx:Declarations> 

    <s:Button click="button1_clickHandler()" label="SendLogToParsley" /> 
</s:Application> 

在這一點上,記錄將在Flex Builder中的控制檯工作,因爲香菜默認使用TraceTarget。現在,我想將我的日誌文件發送到套接字。我寫了一個粗糙的SocketTarget。

package de.axurit.components 
{ 
    import flash.net.Socket; 

    import mx.logging.AbstractTarget; 
    import mx.logging.LogEvent; 
    import mx.logging.targets.LineFormattedTarget; 

    public class SocketTarget extends AbstractTarget 
    { 
     private var _host:String; 
     private var _port:int; 
     private var _socket:Socket; 

     public function SocketTarget(host:String = "localhost",port:int=8085) 
     { 
      _host = host; 
      _port = port; 
      _socket = new Socket (host,port); 
      super(); 
     } 

     override public function logEvent (event:LogEvent):void 
     { 
      trace ("logevent" + event.message); 
      _socket.writeUTF(event.message + String.fromCharCode(13)); 
      _socket.flush(); 
     } 
    } 
} 

在香菜的文檔,我可以看到評論

該標籤創建的默認目標類型是TraceTarget。您可以 顯式聲明的其他目標類型:

如果我添加類型屬性,我收到一個ERRORMESSAGE「在BootstrapProcessor一個或多個錯誤」。與我在打字錯誤後收到的一樣。

你可以給我一些提示,我可以如何將我的日誌發送到套接字目的地?

+0

如果此問題無法清理,我將投票結束。你到底在問什麼?只是爲了舉例?你想達到什麼目的?你看過Parsley Dev手冊中的日誌記錄部分了嗎?你有什麼嘗試?代碼在哪裏? –

+0

是的,你是對的。昨天我有點絕望。我不確定,如果一般情況下是可能的,但不知道,如何以及如果我能實現這一點。所有嘗試都以無效結束。所以我的問題是,如果有人有一個簡單的例子,我怎麼可以登錄我的香菜。我不認爲這很少使用。 – Frank

回答

0

您正在創建套接字,但從未實際連接它。此外,如果您要創建日誌目標,請讓您的課程擴展跟蹤目標並覆蓋日誌功能。

+0

套接字只是一個測試。控制連接的方法將在稍後寫入。對於這一步,我只需要功能。現在我的類從TraceTarget擴展。但是,當我將類型添加到config.xml時,來自parsley的錯誤引導仍然存在。 我沒有找到方法「日誌」,你的意思是logEvent? – Frank

+0

呃,我打開歐芹的採伐記錄。錯誤消息之一是「未知類」。我的類「SocketTarget」包名稱爲com.mydomain.components,名稱爲SocketTarget。parsley配置中的coorect行是什麼? Frank

+0

如果不連接,則無法'測試'。另外,從你放在那裏的代碼來看,你並沒有擴展TraceTarget,而是擴展了AbstractTarget。第三,你只需要像這樣在配置中指定目標:''。我發佈了[在我的博客中類似的東西](http://www.michelboudreau.com/2010/07/13/firebugloggertarget-class/)。 –