Log.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. /**
  3. * MINZ - Copyright 2011 Marien Fressinaud
  4. * Sous licence AGPL3 <http://www.gnu.org/licenses/>
  5. */
  6. /**
  7. * La classe Log permet de logger des erreurs
  8. */
  9. class Minz_Log {
  10. /**
  11. * Les différents niveau de log
  12. * ERROR erreurs bloquantes de l'application
  13. * WARNING erreurs pouvant géner le bon fonctionnement, mais non bloquantes
  14. * NOTICE erreurs mineures ou messages d'informations
  15. * DEBUG Informations affichées pour le déboggage
  16. */
  17. const ERROR = 2;
  18. const WARNING = 4;
  19. const NOTICE = 8;
  20. const DEBUG = 16;
  21. /**
  22. * Enregistre un message dans un fichier de log spécifique
  23. * Message non loggué si
  24. * - environment = SILENT
  25. * - level = WARNING et environment = PRODUCTION
  26. * - level = NOTICE et environment = PRODUCTION
  27. * @param $information message d'erreur / information à enregistrer
  28. * @param $level niveau d'erreur
  29. * @param $file_name fichier de log
  30. */
  31. public static function record ($information, $level, $file_name = null) {
  32. try {
  33. $conf = Minz_Configuration::get('system');
  34. $env = $conf->environment;
  35. } catch (Minz_ConfigurationException $e) {
  36. $env = 'production';
  37. }
  38. if (! ($env === 'silent'
  39. || ($env === 'production'
  40. && ($level >= Minz_Log::NOTICE)))) {
  41. if ($file_name === null) {
  42. $file_name = join_path(USERS_PATH, Minz_Session::param('currentUser', '_'), 'log.txt');
  43. }
  44. switch ($level) {
  45. case Minz_Log::ERROR :
  46. $level_label = 'error';
  47. break;
  48. case Minz_Log::WARNING :
  49. $level_label = 'warning';
  50. break;
  51. case Minz_Log::NOTICE :
  52. $level_label = 'notice';
  53. break;
  54. case Minz_Log::DEBUG :
  55. $level_label = 'debug';
  56. break;
  57. default :
  58. $level_label = 'unknown';
  59. }
  60. $log = '[' . date('r') . ']'
  61. . ' [' . $level_label . ']'
  62. . ' --- ' . $information . "\n";
  63. if (file_put_contents($file_name, $log, FILE_APPEND | LOCK_EX) === false) {
  64. throw new Minz_PermissionDeniedException($file_name, Minz_Exception::ERROR);
  65. }
  66. }
  67. }
  68. /**
  69. * Automatise le log des variables globales $_GET et $_POST
  70. * Fait appel à la fonction record(...)
  71. * Ne fonctionne qu'en environnement "development"
  72. * @param $file_name fichier de log
  73. */
  74. public static function recordRequest($file_name = null) {
  75. $msg_get = str_replace("\n", '', '$_GET content : ' . print_r($_GET, true));
  76. $msg_post = str_replace("\n", '', '$_POST content : ' . print_r($_POST, true));
  77. self::record($msg_get, Minz_Log::DEBUG, $file_name);
  78. self::record($msg_post, Minz_Log::DEBUG, $file_name);
  79. }
  80. /**
  81. * Some helpers to Minz_Log::record() method
  82. * Parameters are the same of those of the record() method.
  83. */
  84. public static function debug($msg, $file_name = null) {
  85. self::record($msg, Minz_Log::DEBUG, $file_name);
  86. }
  87. public static function notice($msg, $file_name = null) {
  88. self::record($msg, Minz_Log::NOTICE, $file_name);
  89. }
  90. public static function warning($msg, $file_name = null) {
  91. self::record($msg, Minz_Log::WARNING, $file_name);
  92. }
  93. public static function error($msg, $file_name = null) {
  94. self::record($msg, Minz_Log::ERROR, $file_name);
  95. }
  96. }