2011-09-01 36 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/)。 –