Flex 2 - Affichage des logs

Aperçu de SOS 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.