Gestion des logs.
Classes recquises:
// Paramètre généraux LogManager.level = 3; // Le niveau d'affichage des logs LogManager.time = true; // Affiche l'heure pour les prochains logs LogManager.ms = true; // Utilise des millisecondes pour les prochains logs LogManager.enabled = false; // Désactive les logs, plus aucun log n'est enregistré LogManager.enabledAll = true; // Active tous les logs des instances trace(LogManager.all); // Affiche les logs en html attention, c'est pour de l'affichage en textField, au pire, en utilisant .htmlText = .text ca enlève la coloration // Log général LogManager.generalInfo = "coucou"; // Le niveau par défaut est 1 LogManager.setGeneralInfo("coucou", 3); // Une info générale de niveau 3 // Pour une instance mesLogs = new LogManager("monNom"); mesLogs.action = "Attention, ca va chauffer !"; mesLogs.enabledLocal = false; // Désactive les logs de l'instance, plus aucun log n'est enregistré // * SPECIAL * // * On peut taper "neologs" pour afficher les logs. Même manipulation pour le cacher // * Niveau 1 : Important // * Niveau 2 : Normal // * Niveau 3 : Bas
Initialisation
Visibilité | Type | Nom | Status | Description |
---|---|---|---|---|
static public | Boolean | include | lecture seule | init du LogManager |
static public | String | cars | Enchainement de caractères pour afficher les logs | |
static public | Number | level | Niveau de log | |
static public | Boolean | enabledAll | Indique si les logs doivent continuer à être entregistrés pour toutes les instances | |
static public | Boolean | enabled | Indique si les logs doivent continuer à être entregistrés dans le général | |
static public | Boolean | ms | Défini si le temps affiché est en millisecondes | |
static public | Boolean | time | Défini si le temps doit être affiché | |
static public | String | all | Lecture seule | Retourne tous les logs |
static public | String | generalInfo | Ecriture seule | Enregistre une info générale dans les logs |
static public | String | generalAction | Ecriture seule | Enregistre une action générale dans les logs |
static public | String | generalError | Ecriture seule | Enregistre une erreur générale dans les logs |
public | String | name | Défini un identifiant à l'instance du LogManager | |
public | String | info | Ecriture seule | Enregistre une info dans les logs de l'instance |
public | String | action | Ecriture seule | Enregistre une action dans les logs de l'instance |
public | String | error | Ecriture seule | Enregistre une erreur dans les logs de l'instance |
Visibilité | Return | Nom | Param 1 | Param 2 | Description |
---|---|---|---|---|---|
public | Void | setInfo | pMessage:String | pLevel:Number | Enregistre une info dans les logs |
public | Void | setAction | pMessage:String | pLevel:Number | Enregistre une action dans les logs |
public | Void | setError | pMessage:String | pLevel:Number | Enregistre une erreur dans les logs |
static public | Void | setGeneralInfo | pMessage:String | pLevel:Number | Enregistre une info générale dans les logs |
static public | Void | setGeneralAction | pMessage:String | pLevel:Number | Enregistre une action générale dans les logs |
static public | Void | setGeneralError | pMessage:String | pLevel:Number | Enregistre une erreur générale dans les logs |
static public | Void | showLogs | Visualisation des logs sur un textField créé dynamiquement |
Un ptit check up !
Ajout des propriétés :
Ajout du système de visualisation des logs
Ajout des niveaux de logs ⇒ Ca permet le debug à plusieurs niveaux
Ajout des propriétés static :
Maintenant, il y a différentes couleurs pour les levels de log
import com.neolao.data.NumberUtils; import com.neolao.data.TimeUtils; /** * Gestion des logs * @author neolao <neo@neolao.com> * @version 1.7 (23/03/2005) * @link http://resources.neolao.com/flash/classes/LogManager * @license http://creativecommons.org/licenses/by-sa/2.0/ */ class com.neolao.LogManager{ public static var className:String = "LogManager"; public static var version:String = "1.7"; // ----------------------------- CONSTANTES -------------------------------- /** * La représentation d'une erreure */ private static var CONST_ERROR:String = "[ERR] "; private static var CONST_ERROR_CLASS:String = "error"; private static var CONST_ERROR_COLOR1:String = "#FF0000"; private static var CONST_ERROR_COLOR2:String = "#FF5555"; private static var CONST_ERROR_COLOR3:String = "#FF9999"; /** * La représentation d'une action */ private static var CONST_ACTION:String = "[ACT] "; private static var CONST_ACTION_CLASS:String = "action"; private static var CONST_ACTION_COLOR1:String = "#000000"; private static var CONST_ACTION_COLOR2:String = "#555555"; private static var CONST_ACTION_COLOR3:String = "#999999"; /** * La représentation d'une information */ private static var CONST_INFO:String = "[INF] "; private static var CONST_INFO_CLASS:String = "info"; private static var CONST_INFO_COLOR1:String = "#0000FF"; private static var CONST_INFO_COLOR2:String = "#5555FF"; private static var CONST_INFO_COLOR3:String = "#9999FF"; /** * La chaine à taper pour afficher les logs */ public static var COMBO:String = "NEOLOGS"; // ----------------------------- VARIABLES --------------------------------- /** * La chaine qui contient la totalité des logs */ private static var _all:String = ""; /** * Indique s'il faut afficher le temps */ private static var _time:Boolean = false; /** * Indique s'il faut utiliser des millisecondes pour le temps */ private static var _milliseconde:Boolean = false; /** * Indique si les logs doivent continuer à être entregistrés */ private static var _enabled:Boolean = true; /** * Indique si les logs des instances doivent continuer à être entregistrés */ private static var _enabledAll:Boolean = false; /** * Ecouteur de touche, pour le système de visualisation des logs */ private static var _listenerKey:Object; /** * Enchainement de caractères pour afficher les logs */ public static var cars:String; /** * La liste des instances de logs */ private static var _logInstance:Array = new Array(); /** * Le niveau de log à afficher */ private static var _level:Number = 1; /** * La chaine qui contient les logs de l'instance du LogManager */ private var _log:String; /** * L'identifiant de l'instance du LogManager */ private var _name:String; /** * Indique si les logs doivent continuer à être entregistrés */ private var _enabledLocal:Boolean; // ----------------------------- EVENEMENTS -------------------------------- /*============================= CONSTRUCTEUR =============================*/ /*========================================================================*/ /** * Initialisation de l'instance LogManager * @param pName Defini un identifiant d'instance du LogManager */ public function LogManager(pName:String){ _log = ""; name = pName || ""; _enabledLocal = _enabledAll; _logInstance.push(this); } /*======================= FIN = CONSTRUCTEUR = FIN =======================*/ /*========================================================================*/ /*=========================== METHODES PRIVEES ===========================*/ /*========================================================================*/ /** * Enregistre un message dans les logs de l'instance * @param pMessage Le message à enregistrer * @param pType Le type du message * @param pLevel Le level du message */ private function setMessage(pMessage:String, pType:String, pLevel:Number){ var o = LogManager.include; if(_enabledLocal && (!pLevel || pLevel <= _level)){ _log += getColor(pType, pLevel); if(pType == "error") _log += "<b>"; _log += getTime(); _log += getType(pType) + pMessage; if(pType == "error") _log += "</b>"; _log += "</font><br/>\n"; setGeneralMessage(_name + pMessage, pType, pLevel); } } // ------------------------------- STATIC ---------------------------------- /** * Récupère la représentation du type du message * @param pType Le type du message * @return La représentation du type du message */ private static function getType(pType:String):String{ return LogManager["CONST_" + pType.toUpperCase()]; } /** * Récupère la couleur du type du message * @param pType Le type du message * @return La couleur du type du message */ private static function getColor(pType:String, pLevel:Number):String{ return "<font face=\"Courier New\" color=\"" + LogManager["CONST_" + pType.toUpperCase() + "_COLOR" + pLevel] + "\">"; } /** * Enregistre un message dans les logs * @param pMessage Le message à enregistrer * @param pType Le type du message * @param pLevel Le level du message */ private static function setGeneralMessage(pMessage:String, pType:String, pLevel:Number){ var o = LogManager.include; if(_enabled && (!pLevel || pLevel <= _level)){ _all += getColor(pType, pLevel); if(pType == "error") _all += "<b>"; _all += getTime(); _all += getType(pType) + pMessage; if(pType == "error") _all += "</b>"; _all += "</font><br/>\n"; } } /** * Pour bien écrire le texte des boutons * @param pLabel Le label du bouton * @return Le format html du label du bouton */ public static function formatGeneralButtonText(pLabel:String):String{ return "<p align=\"center\"><font face=\"Verdana\">" + pLabel + "</font></p>"; } /** * Génération de bouton pour la visualisation des logs * @param pTarget La cible, où va être le bouton * @param pName Le nom du bouton * @param pOnRelease La fonction appelé lorsque l'on clique sur le bouton * @return L'instance du bouton */ private static function generateButton(pTarget:MovieClip, pName:String, pOnRelease:Function):MovieClip{ var vTmp:MovieClip; vTmp = pTarget.createEmptyMovieClip(pName+"_btn", pTarget.getNextHighestDepth()); vTmp.lineStyle(0, 0x666666, 100); vTmp.beginFill(0xCCCCCC, 100); vTmp.lineTo(80, 0); vTmp.lineTo(80, 16); vTmp.lineTo(0, 16); vTmp.lineTo(0, 0); vTmp.endFill(); vTmp.createTextField("titre_txt", vTmp.getNextHighestDepth(), 0, 0, 80, 16); vTmp.titre_txt.selectable = false; vTmp.titre_txt.html = true; vTmp.titre_txt.htmlText = formatGeneralButtonText(pName); vTmp.onRelease = pOnRelease; return vTmp; } /*===================== FIN = METHODES PRIVEES = FIN =====================*/ /*========================================================================*/ /*============================ GETTER SETTER ============================*/ /*========================================================================*/ /** * Défini un identifiant à l'instance du LogManager */ public function set name(pNom:String){ _name = "[" + pNom + "] "; } public function get name():String{ return _name; } /** * Enregistre une erreur dans les logs de l'instance */ public function set error(pMessage:String){ setMessage(pMessage, "error", 1); } /** * Enregistre une action dans les logs de l'instance */ public function set action(pMessage:String){ setMessage(pMessage, "action", 1); } /** * Enregistre une info dans les logs de l'instance */ public function set info(pMessage:String){ setMessage(pMessage, "info", 1); } /** * Indique si les logs doivent continuer à être entregistrés */ public function get enabledLocal():Boolean { return _enabledLocal; } public function set enabledLocal(pBoule:Boolean){ _enabledLocal = pBoule; } /** * Retourne les logs de l'instance si on le cast en String * @return Les logs */ public function toString():String { return _log; } // ------------------------------- STATIC ---------------------------------- /** * Enregistre une erreur générale dans les logs */ public static function set generalError(pMessage:String){ setGeneralMessage(pMessage, "error", 1); } /** * Enregistre une action générale dans les logs */ public static function set generalAction(pMessage:String){ setGeneralMessage(pMessage, "action", 1); } /** * Enregistre une info générale dans les logs */ public static function set generalInfo(pMessage:String){ setGeneralMessage(pMessage, "info", 1); } /** * Retourne le temps depuis le début de l'animation. */ public static function getTime():String { if(_time){ return (_milliseconde)?"[" + NumberUtils.nChar(getTimer(), 8, false) + "]":"[" + TimeUtils.milli2time(getTimer()) + "]"; }else{ return ""; } } /** * Retourne tous les logs. ReadOnly */ public static function get all():String { var out:String = ""; out += "--------------- LOGS -----\n"; out += _all; out += "--------------- LOGS FIN -\n"; return out; } /** * Défini si le temps doit être affiche */ public static function get time():Boolean { return _time; } public static function set time(pBoule:Boolean){ _time = pBoule; } /** * Défini si le temps affiché est en millisecondes */ public static function get ms():Boolean { return _milliseconde; } public static function set ms(pBoule:Boolean){ _milliseconde = pBoule; } /** * Indique si les logs doivent continuer à être entregistrés dans le général */ public static function get enabled():Boolean { return _enabled; } public static function set enabled(pBoule:Boolean){ _enabled = pBoule; } /** * Indique si les logs doivent continuer à être entregistrés pour toutes les instances */ public static function set enabledAll(pBoule:Boolean){ for(var i=0; i<_logInstance.length; i++){ _logInstance[i].enabledLocal = pBoule; } _enabledAll = pBoule; } public static function get enabledAll():Boolean{ return _enabledAll; } /** * init du LogManager */ public static function get include():Boolean{ if(!_listenerKey){ _listenerKey = new Object(); _listenerKey.onKeyDown = function(){ LogManager.cars += String.fromCharCode(Key.getCode()); if(LogManager.COMBO.indexOf(LogManager.cars) != 0){ LogManager.cars = ""; }else{ if(LogManager.cars == LogManager.COMBO){ LogManager.showLogs(); LogManager.cars = ""; } } } Key.addListener(_listenerKey); return true; }else{ return false; } } /** * Niveau de log */ public static function get level():Number{ return _level; } public static function set level(pLevel:Number){ _level = pLevel; } /*====================== FIN = GETTER SETTER = FIN ======================*/ /*========================================================================*/ /*========================== METHODES PUBLIQUES ==========================*/ /*========================================================================*/ /** * Enregistre une erreur dans les logs */ public function setError(pMessage:String, pLevel:Number){ setMessage(pMessage, "error", pLevel); } /** * Enregistre une action dans les logs */ public function setAction(pMessage:String, pLevel:Number){ setMessage(pMessage, "action", pLevel); } /** * Enregistre une info dans les logs */ public function setInfo(pMessage:String, pLevel:Number){ setMessage(pMessage, "info", pLevel); } // ------------------------------- STATIC ---------------------------------- /** * Enregistre une erreur générale dans les logs */ public static function setGeneralError(pMessage:String, pLevel:Number){ setGeneralMessage(pMessage, "error", pLevel); } /** * Enregistre une action générale dans les logs */ public static function setGeneralAction(pMessage:String, pLevel:Number){ setGeneralMessage(pMessage, "action", pLevel); } /** * Enregistre une info générale dans les logs */ public static function setGeneralInfo(pMessage:String, pLevel:Number){ setGeneralMessage(pMessage, "info", pLevel); } /** * Visualisation des logs sur un textField créé dynamiquement */ public static function showLogs(){ var vInstance:MovieClip; var vOptions:MovieClip; var vTmp:MovieClip; // Création du movieClip if(_root.__neolaoLogManager.getDepth() == undefined){ // movieClip vInstance = _root.createEmptyMovieClip("__neolaoLogManager", _root.getNextHighestDepth()); // textField vInstance.createTextField("logs_txt", vInstance.getNextHighestDepth(), 5, 5, Stage.width - 10, Stage.height - 10 - 50); vInstance.logs_txt.background = true; vInstance.logs_txt.html = true; vInstance.logs_txt.border = true; vInstance.logs_txt.multiline = true; vInstance.logs_txt.htmlText = all; // optionsBack vTmp = vInstance.createEmptyMovieClip("optionsBack_mc", vInstance.getNextHighestDepth()); vTmp._x = 5; vTmp._y = Stage.height - 50; vTmp.lineStyle(0, 0x000000, 100); vTmp.beginFill(0x999999, 100); vTmp.lineTo(Stage.width - 10, 0); vTmp.lineTo(Stage.width - 10, 45); vTmp.lineTo(0, 45); vTmp.lineTo(0, 0); vTmp.endFill(); // options vOptions = vInstance.createEmptyMovieClip("options_mc", vInstance.getNextHighestDepth()); vOptions._x = 5; vOptions._y = Stage.height - 50; // option enabled vTmp = generateButton(vOptions, (_enabled)?"enabled":"disabled", function(){ var t = this; if(t.titre_txt.text == "enabled"){ t.titre_txt.htmlText = LogManager.formatGeneralButtonText("disabled"); LogManager.enabled = false; }else{ t.titre_txt.htmlText = LogManager.formatGeneralButtonText("enabled"); LogManager.enabled = true; } }); vTmp._x = 5; vTmp._y = 5; // option enabledAll vTmp = generateButton(vOptions, (_enabledAll)?"enabledAll":"disabledAll", function(){ var t = this; if(t.titre_txt.text == "enabledAll"){ t.titre_txt.htmlText = LogManager.formatGeneralButtonText("disabledAll"); LogManager.enabledAll = false; }else{ t.titre_txt.htmlText = LogManager.formatGeneralButtonText("enabledAll"); LogManager.enabledAll = true; } }); vTmp._x = 5; vTmp._y = 25; // option refresh vTmp = generateButton(vOptions, "refresh", function(){ _root.__neolaoLogManager.logs_txt.htmlText = LogManager.all; }); vTmp._x = 100; vTmp._y = 5; // option level vTmp = generateButton(vOptions, "level "+_level, function(){ var t = this; if(t.titre_txt.text == "level 1"){ t.titre_txt.htmlText = LogManager.formatGeneralButtonText("level 2"); LogManager.level = 2; }else if(t.titre_txt.text == "level 2"){ t.titre_txt.htmlText = LogManager.formatGeneralButtonText("level 3"); LogManager.level = 3; }else{ t.titre_txt.htmlText = LogManager.formatGeneralButtonText("level 1"); LogManager.level = 1; } }); vTmp._x = 100; vTmp._y = 25; }else if(!_root.__neolaoLogManager._visible){ _root.__neolaoLogManager._visible = true; _root.__neolaoLogManager.swapDepths(_root.getNextHighestDepth()); // logs _root.__neolaoLogManager.logs_txt._width = Stage.width - 10; _root.__neolaoLogManager.logs_txt._height = Stage.height - 10 - 50; _root.__neolaoLogManager.logs_txt.htmlText = all; // optionsBack _root.__neolaoLogManager.optionsBack_mc._width = Stage.width - 10; _root.__neolaoLogManager.optionsBack_mc._y = Stage.height - 50; // optionsBack _root.__neolaoLogManager.options_mc._y = Stage.height - 50; }else{ _root.__neolaoLogManager.logs_txt.htmlText = ""; _root.__neolaoLogManager._visible = false; } } /*==================== FIN = METHODES PUBLIQUES = FIN ====================*/ /*========================================================================*/ }