0

我正在寻找在我的 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。您可以显式声明其他目标类型:

如果我添加类型属性,我会收到错误消息“BootstrapProcessor 中的一个或多个错误”。和我在错字后收到的一样。

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

4

1 回答 1

0

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

于 2011-09-04T23:53:48.790 回答