Flex和Parsley Logging

时间:2011-09-01 20:50:49

标签: flex logging flash-builder parsley

我正在寻找在我的flex 4.5项目中记录消息的可能性。这应该包括remoteClasses,errorHandler或手动输入的消息中的错误消息。 阅读了很多网页后,parslay的解决方案看起来很不错。我还是想切换到这个框架。

好处是可以在运行时配置日志记录行为。但我不明白文件。也许是因为我在欧芹中全新。谷歌也没有合适的结果。

你是否已经这样做了,你可以给我一些代码片段。 非常感谢

编辑: 由于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构建器的控制台中工作,因为parsley默认使用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。您可以   明确声明其他目标类型:

如果我添加了type-attribute,我会收到Errormessage“BootstrapProcessor中的一个或多个错误”。与我在输入错字后收到的相同。

您能给我一些提示吗,我如何将日志发送到套接字目的地?

1 个答案:

答案 0 :(得分:0)

您正在创建套接字,但从未实际连接它。另外,如果您要创建日志目标,请使您的类扩展跟踪目标并覆盖日志功能。