Log.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. $username = Minz_Session::param('currentUser', '');
  43. if ($username == '') {
  44. $username = '_';
  45. }
  46. $file_name = join_path(USERS_PATH, $username, 'log.txt');
  47. }
  48. switch ($level) {
  49. case Minz_Log::ERROR :
  50. $level_label = 'error';
  51. break;
  52. case Minz_Log::WARNING :
  53. $level_label = 'warning';
  54. break;
  55. case Minz_Log::NOTICE :
  56. $level_label = 'notice';
  57. break;
  58. case Minz_Log::DEBUG :
  59. $level_label = 'debug';
  60. break;
  61. default :
  62. $level_label = 'unknown';
  63. }
  64. $log = '[' . date('r') . ']'
  65. . ' [' . $level_label . ']'
  66. . ' --- ' . $information . "\n";
  67. if (file_put_contents($file_name, $log, FILE_APPEND | LOCK_EX) === false) {
  68. throw new Minz_PermissionDeniedException($file_name, Minz_Exception::ERROR);
  69. }
  70. }
  71. }
  72. /**
  73. * Automatise le log des variables globales $_GET et $_POST
  74. * Fait appel à la fonction record(...)
  75. * Ne fonctionne qu'en environnement "development"
  76. * @param $file_name fichier de log
  77. */
  78. public static function recordRequest($file_name = null) {
  79. $msg_get = str_replace("\n", '', '$_GET content : ' . print_r($_GET, true));
  80. $msg_post = str_replace("\n", '', '$_POST content : ' . print_r($_POST, true));
  81. self::record($msg_get, Minz_Log::DEBUG, $file_name);
  82. self::record($msg_post, Minz_Log::DEBUG, $file_name);
  83. }
  84. /**
  85. * Some helpers to Minz_Log::record() method
  86. * Parameters are the same of those of the record() method.
  87. */
  88. public static function debug($msg, $file_name = null) {
  89. self::record($msg, Minz_Log::DEBUG, $file_name);
  90. }
  91. public static function notice($msg, $file_name = null) {
  92. self::record($msg, Minz_Log::NOTICE, $file_name);
  93. }
  94. public static function warning($msg, $file_name = null) {
  95. self::record($msg, Minz_Log::WARNING, $file_name);
  96. }
  97. public static function error($msg, $file_name = null) {
  98. self::record($msg, Minz_Log::ERROR, $file_name);
  99. }
  100. }