PageRenderTime 50ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/environment/classes/logger/Logger.class.php

https://github.com/fb83/Project-Pier
PHP | 256 lines | 109 code | 33 blank | 114 comment | 18 complexity | faa52b37e6d6e7ffbfe2654e7b327e03 MD5 | raw file
Possible License(s): AGPL-1.0, GPL-2.0, AGPL-3.0, LGPL-2.1, GPL-3.0
  1. <?php
  2. /**
  3. * Small logging library. It supports loggin messages into multople sessions at the
  4. * same time and multiple backends for storing logged messages
  5. *
  6. * @package Logger
  7. * @version 1.0
  8. * @http://www.projectpier.org/
  9. */
  10. class Logger {
  11. /** Default session name **/
  12. const DEFAULT_SESSION_NAME = 'default';
  13. /** Severity **/
  14. const DEBUG = 0;
  15. const INFO = 1;
  16. const WARNING = 2;
  17. const ERROR = 3;
  18. const FATAL = 4;
  19. const UNKNOWN = 5;
  20. /**
  21. * Default backend
  22. *
  23. * @var Logger_Backend
  24. */
  25. static private $default_backend;
  26. /**
  27. * Array of additional, named backends
  28. *
  29. * @var array
  30. */
  31. static private $additional_backends = array();
  32. /**
  33. * Default log session
  34. *
  35. * @var Logger_Session
  36. */
  37. static private $default_session;
  38. /**
  39. * Array of additional log sessions
  40. *
  41. * @var array
  42. */
  43. static private $additional_sessions = array();
  44. /**
  45. * Logger is enabled
  46. *
  47. * @var boolean
  48. */
  49. static private $enabled = true;
  50. // ---------------------------------------------------
  51. // Utils
  52. // ---------------------------------------------------
  53. /**
  54. * Log a message (this will create a Logger_Entry in $session_name session - NULL for default session)
  55. *
  56. * @param string $message
  57. * @return boolean
  58. * @throws InvalidParamError If we don't get session by $session_name
  59. */
  60. static function log($message, $severity = Logger::DEBUG, $session_name = null) {
  61. if (!self::$enabled) {
  62. return false;
  63. } // if
  64. if ($message instanceof Exception) {
  65. $message_to_log = $message->__toString();
  66. } else {
  67. $message_to_log = (string) $message;
  68. } // if
  69. $session = self::getSession($session_name);
  70. if (!($session instanceof Logger_Session)) {
  71. throw new InvalidParamError('session_name', $session_name, "There is no session matching this name (null for default session): " . var_export($session_name, true));
  72. } // if
  73. return $session->addEntry(new Logger_Entry($message_to_log, $severity));
  74. } // log
  75. /**
  76. * Seve single session into specific backend
  77. *
  78. * @param string $session_name
  79. * @param string $backend_name
  80. * @return boolean
  81. * @throws InvalidParamError If session $session_name does not exists
  82. * @throws InvalidParamError If backedn $backend_name does not exists
  83. */
  84. static function saveSession($session_name = null, $backend_name = null) {
  85. if (!self::$enabled) {
  86. return false;
  87. } // if
  88. $session = self::getSession($session_name);
  89. if (!($session instanceof Logger_Session)) {
  90. throw new InvalidParamError('session_name', $session_name, 'There is no session matching this name (null for default session): ' . var_export($session_name, true));
  91. } // if
  92. $backend = self::getBackend($backend_name);
  93. if (!($backend instanceof Logger_Backend)) {
  94. throw new InvalidParamError('backend_name', $backend_name, 'There is no backend matching this name (null for default backend): ' . var_export($session_name, true));
  95. } // if
  96. return $backend->saveSession($session);
  97. } // saveSession
  98. /**
  99. * Save all sessions into specific backend
  100. *
  101. * @param string $backend_name Backend name, NULL for default
  102. * @return boolean
  103. * @throws InvalidParamError If backedn $backend_name does not exists
  104. */
  105. static function saveAll($backend_name = null) {
  106. if (!self::$enabled) {
  107. return false;
  108. } // if
  109. $backend = self::getBackend($backend_name);
  110. if (!($backend instanceof Logger_Backend)) {
  111. throw new InvalidParamError('backend_name', $backend_name, 'There is no backend matching this name (null for default backend): ' . var_export($session_name, true));
  112. } // if
  113. return $backend->saveSessionSet(self::getAllSessions());
  114. } // saveAll
  115. /**
  116. * Convert sverity to string. If $severity is not recognized UNKNOWN is returned
  117. *
  118. * @param integer $severity
  119. * @return string
  120. */
  121. static function severityToString($severity) {
  122. switch ($severity) {
  123. case Logger::DEBUG:
  124. return 'DEBUG';
  125. case Logger::INFO:
  126. return 'INFO';
  127. case Logger::WARNING:
  128. return 'WARNING';
  129. case Logger::ERROR:
  130. return 'ERROR';
  131. case Logger::FATAL:
  132. return 'FATAL';
  133. default:
  134. return 'UNKNOWN';
  135. } // switch
  136. } // severityToString
  137. // ---------------------------------------------------
  138. // Getters and setters
  139. // ---------------------------------------------------
  140. /**
  141. * Return specific backend. If $name is not specific default backend will be returned
  142. *
  143. * @param string $name Backend name, leave blank to use default backend
  144. * @return Logger_Backend
  145. */
  146. static function getBackend($name = null) {
  147. return is_null($name) ? self::$default_backend : array_var(self::$additional_backends, $name);
  148. } // getBackend
  149. /**
  150. * Set backend. If $name is NULL default backend will be set
  151. *
  152. * @param Logger_Backend $backend
  153. * @param string $name Leave blank to set default backend
  154. * @return Logger_Backend
  155. */
  156. static function setBackend(Logger_Backend $backend, $name = null) {
  157. if (is_null($name)) {
  158. self::$default_backend = $backend;
  159. } else {
  160. self::$additional_backends[$name] = $backend;
  161. } // if
  162. return $backend;
  163. } // setBackend
  164. /**
  165. * Return session. If $name is NULL default session will be returned
  166. *
  167. * @param string $name
  168. * @return Logger_Session
  169. */
  170. static function getSession($name = null) {
  171. return is_null($name) ? self::$default_session : array_var(self::$additional_sessions, $name);
  172. } // getSession
  173. /**
  174. * Set logger session. If $name is NULL default session will be set
  175. *
  176. * @param Logger_Session $session
  177. * @param string $name Session name, if NULL default session will be set
  178. * @return null
  179. */
  180. static function setSession(Logger_Session $session, $name = null) {
  181. if (is_null($name)) {
  182. self::$default_session = $session;
  183. } else {
  184. self::$additional_sessions[$name] = $session;
  185. } // if
  186. } // setSession
  187. /**
  188. * Return all sessions (default + additional) as array
  189. *
  190. * @param void
  191. * @return array
  192. */
  193. static function getAllSessions() {
  194. $result = array();
  195. if (self::$default_session instanceof Logger_Session) {
  196. $result[] = self::$default_session;
  197. } // if
  198. if (count(self::$additional_sessions)) {
  199. return array_merge($result, self::$additional_sessions);
  200. } else {
  201. return $result;
  202. } // if
  203. } // getAllSessions
  204. /**
  205. * Get enabled
  206. *
  207. * @param null
  208. * @return boolean
  209. */
  210. static function getEnabled() {
  211. return self::$enabled;
  212. } // getEnabled
  213. /**
  214. * Set enabled value
  215. *
  216. * @param boolean $value
  217. * @return null
  218. */
  219. static function setEnabled($value) {
  220. self::$enabled = (boolean) $value;
  221. } // setEnabled
  222. } // Logger
  223. ?>