سؤال

i'm looking for a possibility to log messages in my flex 4.5 Project. This should cover errormessages in remoteClasses, errorHandler or messages typing by hand. After reading a lot of webpages, the solution from parslay looks good. i want to switch to this framework anyway.

the benefit is the possibility to configure the logging behavior at runtime. but i don't understand the documentation. perhaps because I'm brandnew in parsley. Also google has no fitting result.

Do you have already did this and it is possible for you to give me a few code snippets. Thanks a lot

Frank

EDIT: Because of J_A_X justified criticism, i add my code, because i have partially succeeded.

First we need a config file, because i want to configure the logging behavior in runtime. This is a simple xml-file in the project root.

<?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>

This is my Application:

<?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>

At this point, the logging will work in the console of the flex builder, because parsley uses by default the TraceTarget. Now, i want to send my Logfiles to a socket. I wrote a litte rough 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();
        }
    }
}

In the parsley documentation i can see the comment

The default target type created by this tag is a TraceTarget. You can explicitly declare other target types:

If i add the type-attribute, i receive a Errormessage "One or more errors in BootstrapProcessor". The same as i received after a typo.

Can you give me some hints, how i can send my logs to a socket destination?

هل كانت مفيدة؟

المحلول

You're creating the socket, but never actually connect it. Plus, if you're going to make a log target, make your class extend trace target and override the log function.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top