PageRenderTime 43ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/demo/scalr_newui/app/src/class.LoggerAppenderScalr.php

https://github.com/kennethjiang/Wolke
PHP | 319 lines | 179 code | 58 blank | 82 comment | 12 complexity | 3bcfc530c96c570ce1b17a852d1fb695 MD5 | raw file
  1. <?php
  2. require_once(LOG4PHP_DIR . '/LoggerAppender.php');
  3. require_once(LOG4PHP_DIR . '/helpers/LoggerOptionConverter.php');
  4. class LoggerAppenderScalr extends LoggerAppender {
  5. /**
  6. * Create the log table if it does not exists (optional).
  7. * @var boolean
  8. */
  9. var $createTable = true;
  10. /**
  11. * The type of database to connect to
  12. * @var string
  13. */
  14. var $type;
  15. /**
  16. * Database user name
  17. * @var string
  18. */
  19. var $user;
  20. /**
  21. * Database password
  22. * @var string
  23. */
  24. var $password;
  25. /**
  26. * Database host to connect to
  27. * @var string
  28. */
  29. var $host;
  30. /**
  31. * Name of the database to connect to
  32. * @var string
  33. */
  34. var $database;
  35. /**
  36. * A {@link LoggerPatternLayout} string used to format a valid insert query (mandatory).
  37. * @var string
  38. */
  39. var $sql;
  40. /**
  41. * Table name to write events. Used only if {@link $createTable} is true.
  42. * @var string
  43. */
  44. var $table;
  45. /**
  46. * @var object Adodb instance
  47. * @access private
  48. */
  49. var $db = null;
  50. /**
  51. * @var boolean used to check if all conditions to append are true
  52. * @access private
  53. */
  54. var $canAppend = true;
  55. /**
  56. * @access private
  57. */
  58. var $requiresLayout = false;
  59. /**
  60. * Constructor.
  61. *
  62. * @param string $name appender name
  63. */
  64. function LoggerAppenderDb($name)
  65. {
  66. $this->LoggerAppenderSkeleton($name);
  67. }
  68. /**
  69. * Setup db connection.
  70. * Based on defined options, this method connects to db defined in {@link $dsn}
  71. * and creates a {@link $table} table if {@link $createTable} is true.
  72. * @return boolean true if all ok.
  73. */
  74. function activateOptions()
  75. {
  76. $this->db = Core::GetDBInstance();//null, true);
  77. $this->layout = LoggerReflectionUtils::createObject('LoggerPatternLayoutScalr');
  78. $this->layout->setConversionPattern($this->getSql());
  79. $this->canAppend = true;
  80. }
  81. function append(LoggerLoggingEvent $event)
  82. {
  83. if ($this->canAppend)
  84. {
  85. try
  86. {
  87. // Reopen new mysql connection (need for php threads)
  88. $this->activateOptions();
  89. if ($event->message instanceOf FarmLogMessage)
  90. {
  91. $severity = $this->SeverityToInt($event->getLevel()->toString());
  92. $message = $this->db->qstr($event->message->Message);
  93. $query = "INSERT DELAYED INTO logentries SET
  94. serverid = '',
  95. message = {$message},
  96. severity = '{$severity}',
  97. time = '".time()."',
  98. source = '".$event->getLoggerName()."',
  99. farmid = '{$event->message->FarmID}'
  100. ";
  101. $this->db->Execute($query);
  102. $event->message = "[FarmID: {$event->message->FarmID}] {$event->message->Message}";
  103. return;
  104. }
  105. elseif ($event->message instanceof ScriptingLogMessage)
  106. {
  107. $message = $this->db->qstr($event->message->Message);
  108. $query = "INSERT DELAYED INTO scripting_log SET
  109. farmid = '{$event->message->FarmID}',
  110. event = '{$event->message->EventName}',
  111. server_id = '{$event->message->ServerID}',
  112. dtadded = NOW(),
  113. message = {$message}
  114. ";
  115. $this->db->Execute($query);
  116. $event->message = "[Farm: {$event->message->FarmID}] {$event->message->Message}";
  117. return;
  118. }
  119. else
  120. {
  121. if (stristr($event->message, "AWS was not able to validate the provided access credentials") ||
  122. stristr($event->message, "The X509 Certificate you provided does not exist in our records")
  123. )
  124. return;
  125. }
  126. $level = $event->getLevel()->toString();
  127. // Redeclare threadName
  128. $event->threadName = TRANSACTION_ID;
  129. $event->subThreadName = defined("SUB_TRANSACTIONID") ? SUB_TRANSACTIONID
  130. : $GLOBALS["SUB_TRANSACTIONID"] ? $GLOBALS["SUB_TRANSACTIONID"]
  131. : TRANSACTION_ID;
  132. $event->farmID = defined("LOGGER_FARMID") ? LOGGER_FARMID
  133. : $GLOBALS["LOGGER_FARMID"] ? $GLOBALS["LOGGER_FARMID"]
  134. : null;
  135. if (defined('TRANSACTION_ID'))
  136. {
  137. if ($level == "FATAL" || $level == "ERROR")
  138. {
  139. // Set meta information
  140. $this->db->Execute("INSERT DELAYED INTO syslog_metadata SET transactionid='".TRANSACTION_ID."', errors='1', warnings='0'
  141. ON DUPLICATE KEY UPDATE errors=errors+1
  142. ");
  143. }
  144. else
  145. {
  146. if ($level == "WARN")
  147. {
  148. // Set meta information
  149. $this->db->Execute("INSERT DELAYED INTO syslog_metadata SET transactionid='".TRANSACTION_ID."', errors='0', warnings='1'
  150. ON DUPLICATE KEY UPDATE warnings=warnings+1
  151. ");
  152. }
  153. }
  154. }
  155. $msg = $event->message;
  156. $event->message = $this->db->qstr($event->message);
  157. $query = $this->layout->format($event);
  158. $this->db->Execute($query);
  159. $event->message = $msg;
  160. }
  161. catch(Exception $e)
  162. {
  163. }
  164. }
  165. }
  166. function SeverityToInt($severity)
  167. {
  168. $severities = array("DEBUG" => 1, "INFO" => 2, "WARN" => 3, "ERROR" => 4, "FATAL" => 5);
  169. return $severities[$severity];
  170. }
  171. function close()
  172. {
  173. if ($this->db !== null)
  174. $this->db->Close();
  175. $this->closed = true;
  176. }
  177. /**
  178. * @return boolean
  179. */
  180. function getCreateTable()
  181. {
  182. return $this->createTable;
  183. }
  184. /**
  185. * @return string the sql pattern string
  186. */
  187. function getSql()
  188. {
  189. return $this->sql;
  190. }
  191. /**
  192. * @return string the table name to create
  193. */
  194. function getTable()
  195. {
  196. return $this->table;
  197. }
  198. /**
  199. * @return string the database to connect to
  200. */
  201. function getDatabase() {
  202. return $this->database;
  203. }
  204. /**
  205. * @return string the database to connect to
  206. */
  207. function getHost() {
  208. return $this->host;
  209. }
  210. /**
  211. * @return string the user to connect with
  212. */
  213. function getUser() {
  214. return $this->user;
  215. }
  216. /**
  217. * @return string the password to connect with
  218. */
  219. function getPassword() {
  220. return $this->password;
  221. }
  222. /**
  223. * @return string the type of database to connect to
  224. */
  225. function getType() {
  226. return $this->type;
  227. }
  228. function setCreateTable($flag)
  229. {
  230. $this->createTable = LoggerOptionConverter::toBoolean($flag, true);
  231. }
  232. function setType($newType)
  233. {
  234. $this->type = $newType;
  235. }
  236. function setDatabase($newDatabase)
  237. {
  238. $this->database = $newDatabase;
  239. }
  240. function setHost($newHost)
  241. {
  242. $this->host = $newHost;
  243. }
  244. function setUser($newUser)
  245. {
  246. $this->user = $newUser;
  247. }
  248. function setPassword($newPassword)
  249. {
  250. $this->password = $newPassword;
  251. }
  252. function setSql($sql)
  253. {
  254. $this->sql = $sql;
  255. }
  256. function setTable($table)
  257. {
  258. $this->table = $table;
  259. }
  260. }
  261. ?>