2011-09-01 3 views
0

Je suis à la recherche d'une possibilité de consigner des messages dans mon projet Flex 4.5. Cela devrait couvrir les erreurs dans remoteClasses, errorHandler ou les messages tapés à la main. Après avoir lu beaucoup de pages Web, la solution de parslay semble bonne. Je veux passer à ce cadre de toute façon. L'avantage est la possibilité de configurer le comportement de journalisation au moment de l'exécution. mais je ne comprends pas la documentation. peut-être parce que je suis tout nouveau dans le persil. Aussi, google n'a aucun résultat approprié.Journalisation Flex and Persil

Avez-vous déjà fait cela et il est possible que vous me donniez quelques extraits de code. Merci beaucoup

Frank

EDIT: En raison de la critique justifiée J_A_X, j'ajouter mon code, parce que je l'ai partiellement réussi.

D'abord, nous avons besoin d'un fichier de configuration, car je veux configurer le comportement de la journalisation en cours d'exécution. C'est un simple fichier xml dans la racine du projet.

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

Ceci est mon 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> 

À ce stade, l'exploitation forestière fonctionnera dans la console du constructeur flex, parce que le persil utilise par défaut le TraceTarget. Maintenant, je veux envoyer mes fichiers journaux à une socket. J'ai écrit un peu SocketTarget rugueux.

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(); 
     } 
    } 
} 

Dans la documentation de persil je peux voir le commentaire

Le type de cible par défaut créé par cette balise est un TraceTarget. Vous pouvez déclarer explicitement d'autres types de cibles:

Si j'ajouter le type attribut, je reçois un errorMessage « Une ou plusieurs erreurs dans BootstrapProcessor ». La même chose que j'ai reçu après une faute de frappe.

Pouvez-vous me donner quelques conseils, comment puis-je envoyer mes journaux à une destination socket?

+0

Je vais voter pour fermer si cette question ne peut pas être nettoyé. Que demandez-vous exactement? Juste pour des exemples? Qu'est-ce que vous essayez d'accomplir? Avez-vous regardé la section de journalisation dans le manuel Dev de Persil? Qu'avez-vous essayé? Où est le code? –

+0

oui vous avez raison. hier j'étais un peu désespérée. Je n'étais pas sûr, si c'est possible en général et je ne sais pas, comment et si je peux mettre en œuvre ceci. Tous les essais avaient pris fin à NIL. Donc ma question était, si quelqu'un a un exemple simple, comment je peux enregistrer quelque chose que je persiste. Je ne pense pas que cela soit rarement utilisé. – Frank

Répondre

0

Vous créez le socket, mais jamais le connecter. De plus, si vous souhaitez créer une cible de journal, faites en sorte que votre classe étende la cible de trace et remplace la fonction de journalisation.

+0

la prise est juste un test. Les méthodes pour contrôler la connexion seront écrites plus tard. Pour cette étape, j'ai juste besoin de la fonctionnalité. Maintenant, ma classe s'étend de TraceTarget. Mais l'erreur bootstrap de persil est toujours là quand j'ajoute le type au fichier config.xml. Je n'ai pas trouvé la méthode "log", voulez-vous dire logEvent? – Frank

+0

Euh, j'active la journalisation du persil. l'une des erreurs est "classe inconnue". Ma classe "SocketTarget" hs le nom du package com.mydomain.components et a le nom SocketTarget.Quelle est la ligne de coorect dans la configuration de persil? Frank

+0

Vous ne pouvez pas 'tester' sans vous connecter. De plus, à partir du code que vous avez mis là, vous ne développez pas TraceTarget, mais AbstractTarget. Et troisièmement, il suffit de spécifier la cible dans la configuration comme ceci: ''. J'ai posté [quelque chose de similaire dans mon blog] (http://www.michelboudreau.com/2010/07/13/firebugloggertarget-class/). –