mLogger - prosta klasa do logowania (zapisywania) błędów, komunikatów itp.

Strona projektu: http://www.michell.pl/moje-projekty/mlogger/

Kod źródłowy:

  1. <?php
  2. /**
  3.  * @package mLogger
  4.  * @author Michell `b4x` Hoduń
  5.  * @copyright (c) 2009 Michell `b4x` Hoduń <mhodun@gmail.com>
  6.  * @description Klasa odpowiedzialna za logowanie różnych informacji.
  7.  * @url <a href="http://www.michell.pl/moje-projekty/mlogger/" target="_blank">http://www.michell.pl/moje-projekty/mlogger/</a>
  8.  * @version 1.0
  9.  */
  10. class mLogger
  11. {
  12. protected static $_mLogger_instance;
  13. protected static $_mLogger_messages = array();
  14. protected static $_mLogger_config = array
  15. (
  16. 'log_dir' => 'mlogger_logs', // Folder z logami
  17. 'date_format' => 'd/m/Y H:i:s', // Format daty logów via date()
  18. 'file_format' => 'd-m-Y', // Format nazewnictwa plików via date()
  19. 'file_extension' => '.txt', // Rozszerzenie logów
  20. 'log_mode' => 0, // 0 = Zapisuj wszystko, możesz ustawić dowolną liczbę dla logów.
  21. 'log_template' => '[:date: - :message: | level: :log_level: | :ip: <-> :req_url:]', // Szablon logów
  22. );
  23.  
  24. public function instance($config = array())
  25. {
  26. if(mLogger::$_mLogger_instance === NULL)
  27. {
  28. mLogger::$_mLogger_instance = new mLogger ($config);
  29. }
  30.  
  31. return mLogger::$_mLogger_instance;
  32. }
  33.  
  34. public function __construct($config = array())
  35. {
  36. if (! file_exists(self::$_mLogger_config['log_dir'].DIRECTORY_SEPARATOR.date(self::$_mLogger_config['file_format']).self::$_mLogger_config['file_extension']))
  37. {
  38. try
  39. {
  40. self::create_files();
  41. }
  42. catch (Exception $e)
  43. {
  44. echo $e->getMessage();
  45. }
  46. }
  47.  
  48. foreach ($config as $k => $v)
  49. {
  50. self::$_mLogger_config[$k] = $v;
  51. }
  52. }
  53.  
  54. public static function add_log ($message, $mode = 1)
  55. {
  56. mLogger::$_mLogger_messages[$mode][] = array
  57. (
  58. 'date' => date(self::$_mLogger_config['date_format']),
  59. 'message' => $message,
  60. 'mode' => $mode,
  61. );
  62. }
  63.  
  64. protected static function save_to_file ($logs = array())
  65. {
  66. $file_text = '';
  67. foreach ($logs as $log)
  68. {
  69. $file_text .= strtr (self::$_mLogger_config['log_template'], array
  70. (
  71. ':date:' => date(self::$_mLogger_config['date_format']),
  72. ':message:' => $log['message'],
  73. ':ip:' => $_SERVER['REMOTE_ADDR'],
  74. ':req_url:' => $_SERVER['REQUEST_URI'],
  75. ':log_level:' => $log['mode'],
  76. ))."\r\n";
  77. }
  78.  
  79. @file_put_contents (self::$_mLogger_config['log_dir'].DIRECTORY_SEPARATOR.date(self::$_mLogger_config['file_format']).self::$_mLogger_config['file_extension'], file_get_contents(self::$_mLogger_config['log_dir'].DIRECTORY_SEPARATOR.date(self::$_mLogger_config['file_format']).self::$_mLogger_config['file_extension']).$file_text);
  80. }
  81.  
  82. protected static function create_files ()
  83. {
  84. if(! is_writable (self::$_mLogger_config['log_dir'])) throw new Exception('Log dir: <strong>'.self::$_mLogger_config['log_dir'].'</strong> is not writable');
  85. if(!@touch (self::$_mLogger_config['log_dir'].DIRECTORY_SEPARATOR.date(self::$_mLogger_config['file_format']).self::$_mLogger_config['file_extension'])) throw new Exception('Can\'t create log file: <strong>'.self::$_mLogger_config['log_dir'].DIRECTORY_SEPARATOR.self::$_mLogger_config['file_format'].'</strong> &mdash; check chmod and try again.');
  86. }
  87.  
  88. public function __destruct()
  89. {
  90. if(self::$_mLogger_config['log_mode'] === 0)
  91. {
  92. foreach (self::$_mLogger_messages as $message_mode)
  93. {
  94. foreach ($message_mode as $message) $messages[] = $message;
  95. }
  96. }
  97. else
  98. {
  99. $messages = self::$_mLogger_messages[self::$_mLogger_config['log_mode']];
  100. }
  101. self::save_to_file ($messages);
  102. }
  103. }
  104. ?>



Przykładowe użycie klasy:

  1. <?php
  2. require 'mLogger.php';
  3.  
  4. // Przykładowa konfiguracja
  5. mLogger::instance(array
  6. (
  7. 'log_dir' => dirname(__FILE__).DIRECTORY_SEPARATOR.'mlogger_logs', // Absolutna ścieżka do katalogu z logami
  8. 'log_mode' => 0 // 0 = Zapisuj wszystko, możesz ustawić dowolną liczbę dla logów.
  9. ));
  10.  
  11. // Przykładowe użycie klasy
  12. mLogger::instance()->add_log ('mLogger working!', 1);
  13. ?>



Klasę wraz z przykładem użycia można pobrać pod następującym adresem: http://www.michell.pl/sources/mLogger/mLogger_1.0.rar