jeudi 19 mai 2011

Fichier de Log

Yii dispose d'un système de log complet et extensible permettant d'écrire dans un fichier, une table de la base de données, la page web elle même, et potentiellement vers différents autres supports. Commençons par le plus simple : le fichier texte.

Le composant dédié à la gestion des logs est initialisé de la façon habituelle, dans le fichier de configuration protected/config/main.php. Par défaut, la commande 'webapp' qui créé automatiquement une application Yii de base (un squelette), inclus déjà la déclaration du composant de log. On va partir de là.

Déclarons un route menant au fichier 'my_log.txt', que nous voulons placer dans le répertoire './protected/data'. De plus, nous souhaitons que seuls les messages de niveau ERROR et WARNING soient rajoutés dans ce fichier, les autres seront simplement ignorés (ou enregistrés dans une autre route que nous aurions défini par ailleurs. Un filtre sur les catégories est également défini par le paramètre 'category'. Enfin, il est possible d'indiquer la taille maximale autorisée pour un fichier log, ainsi que le nombre de fichiers logs que nous souhaitons conserver dans la roation.

Voyons ce que cela donne :

'log'=>array(
      'class'=>'CLogRouter',
         'routes'=>array(
            array(
               'class'  => 'CFileLogRoute',
               // niveaux disponibles : trace, info, profile, warning, error
               'levels' => 'error, warning',
               'logFile'=> 'my_log.txt',

               'logPath'=> 'protected/data',
               // logPath peut aussi être défini comme cela :
               //'logPath'=> dirname(__FILE__).DIRECTORY_SEPARATOR.'..'.DIRECTORY_SEPARATOR.'runtime'

               'categories' => 'yiiexemple.*, category.app',

               // un fichier log ne devra pas faire plus de 2Mo. 
               // Lorsqu'il les dépasse Yii le renomme en rajoutant
               // un numéro d'index à la fin du fichier.
               // Par exemple : my_log.txt.1, my_log.txt.2 etc...
               'maxFileSize' => 2048,

               // Yii ne conservera que 5 fichiers log
               'maxLogFiles' => 5
            ),
         ),
      ),


On notera que le paramètre logPath ne peut pas être initialisé par la méthode Yii::getPathOfAlias(...) car au moment ou le composant log est initialisé, cette méthode n'est pas opérationnelle.
Notre log est déclaré, voici maintenant quelques exemples d'utilisation au travers de la fonction Yii::log().

// les messages suivants seront enregistrés dans notre log
   Yii::log('message1',CLogger::LEVEL_ERROR,'yiiexemple.app.logger');
   Yii::log('message2',CLogger::LEVEL_ERROR,'yiiexemple.app');
   Yii::log('message3',CLogger::LEVEL_WARNING,'category.app');

   // les messages suivants ne seront PAS enregistrés dans notre log
   // la catégorie 'application.test' n'est pas prise en compte par notre 
   // filtre qui n'autorise que les catégories 'yiiexemple.*' ainsi que
   // 'category.app'

   Yii::log('message4',CLogger::LEVEL_ERROR,'category.app.test');
   Yii::log('message5',CLogger::LEVEL_ERROR,'application.test');

   // pas de catégorie = pas de log non plus !
   Yii::log('message6',CLogger::LEVEL_ERROR);

   // Dans ce cas, la catégorie est acceptée, mais c'est le niveau de 
   // trace (LEVEL_INFO) n'est pas suffisant pour notre log
   Yii::log('message7',CLogger::LEVEL_INFO,'yiiexemple.app');



Liens :

Aucun commentaire:

Enregistrer un commentaire