Flex 2 - Affichage des logs
Je continue mes tests sur Flex 2 SDK (pas le builder) et je suis arrivé au problème de l'affichage des logs. J'ai d'abord regardé comment afficher les messages de la méthode trace, puis j'ai ajouté une nouvelle sortie pour SOS PowerFlasher.
Utiliser le Flash Player version debugger
Après avoir fraichement téléchargé et décompressé Flex 2 SDK, le Flash Player version debugger se trouve ici : flex_sdk_2/player/debug/SAFlashPlayer.exe
Il faut lancer les SWF avec ce lecteur, mais avant, il faut lancer autre chose, le debugger qui se trouve ici : flex_sdk_2/bin/fdb.exe
Voilà à quoi ressemble ce debugger :

Il faut ensuite lancer la commande run. Il va marqué le message !waitingForPlayerToConnect!. C'est à ce moment là qu'il faut ouvrir un SWF avec le Flash Player version debugger.
Le debugger va détecter l'ouverture et afficher quelque chose dans ce genre là :

Le lecteur semble figé, c'est normal. Il y a quelques pauses avant le lancement du SWF, comme des break point imposés. Il faut juste taper continue dans le debugger pour passer à la suite.
Une fois le SWF lancé, tous les trace que vous avez fait s'afficheront sur le debugger sous la forme :
[trace] coucou [trace] plop
Utiliser le Logging API
Le problème avec trace, c'est qu'il ne fait qu'afficher des messages dans le debugger et pas ailleurs.
Le framework fourni une Logging API pour gérer les logs. Au lieu de faire simplement :
private function init():void { trace("coucou"); trace("plop"); }
Vous pouvez faire l'équivalent :
import mx.logging.*; import mx.logging.targets.*; private function init():void { var logger:ILogger = Log.getLogger("default"); // On récupère l'objet qui s'occupe d'envoyer les messages var target:ILoggingTarget = new TraceTarget(); // On crée une cible, ici c'est le debugger Log.addTarget(target); // On ajoute la cible à l'objet logger.log(LogEventLevel.DEBUG, "coucou"); logger.log(LogEventLevel.DEBUG, "plop"); }
SOS PowerFlasher
L'avantage, c'est de pouvoir gérer plusieurs sorties de logs. J'ai donc tenté de créer une sortie pour SOS PowerFlasher.
Voilà la source de ma classe pour SOS PowerFlasher : SOSTarget.as.
Il suffit donc de l'instancier et de l'ajouter au logger comme dans l'exemple avec TraceTarget.
Le problème quand on utilise SOS PowerFlasher, c'est qu'il y a un problème de sécurité à l'ouverture d'un SWF avec le Flash Player version debugger. Il faut créer un projecteur pour avoir le droit d'utiliser XMLSocket. En fait, je n'ai pas du tout creusé le problème, je ferai peut-être un billet sur les sandbox si c'est intéressant.
Bah tiens, j'vais aussi faire une cible pour la Console de Iteratif :) .
Commentaires
1. Le jeudi, octobre 19 2006, 08:11 par thecaptain
Salut,
yes super intéressant cette histoire de logging. Sur un player online on arriverai à rediriger les logs sur une classe pour envoyer des requetes à un PHP (du genre n implémentant l'interface ILoggingTarget) ? :)
@++
2. Le jeudi, octobre 19 2006, 09:32 par neolao
Oui j'pense, par contre, il faudrait faire en sorte de ne pas avoir une requête http par trace, genre une pile temporaire et envoyer toutes les 5 secondes par exemple.