logger.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. defined('ABSPATH') || exit;
  3. if (!defined('NEWSLETTER_LOG_DIR')) {
  4. define('NEWSLETTER_LOG_DIR', WP_CONTENT_DIR . '/logs/newsletter');
  5. }
  6. class NewsletterLogger {
  7. const NONE = 0;
  8. const FATAL = 1;
  9. const ERROR = 2;
  10. const INFO = 3;
  11. const DEBUG = 4;
  12. var $level;
  13. var $module;
  14. var $file;
  15. function __construct($module) {
  16. $this->module = $module;
  17. if (defined('NEWSLETTER_LOG_LEVEL')) $this->level = NEWSLETTER_LOG_LEVEL;
  18. else $this->level = get_option('newsletter_log_level', self::ERROR);
  19. $secret = get_option('newsletter_logger_secret');
  20. if (strlen($secret) < 8) {
  21. $secret = NewsletterModule::get_token(8);
  22. update_option('newsletter_logger_secret', $secret);
  23. }
  24. if (!wp_mkdir_p(NEWSLETTER_LOG_DIR)) {
  25. $this->level = self::NONE;
  26. }
  27. $this->file = NEWSLETTER_LOG_DIR . '/' . $module . '-' . date('Y-m') . '-' . $secret . '.txt';
  28. }
  29. /**
  30. *
  31. * @param string|WP_Error|array|stdClass $text
  32. * @param int $level
  33. */
  34. function log($text, $level = self::ERROR) {
  35. global $current_user;
  36. if ($level != self::FATAL && $this->level < $level) return;
  37. if ($current_user) {
  38. $user_id = $current_user->ID;
  39. } else {
  40. $user_id = 0;
  41. }
  42. $time = date('d-m-Y H:i:s ');
  43. switch ($level) {
  44. case self::FATAL: $time .= '- FATAL';
  45. break;
  46. case self::ERROR: $time .= '- ERROR';
  47. break;
  48. case self::INFO: $time .= '- INFO ';
  49. break;
  50. case self::DEBUG: $time .= '- DEBUG';
  51. break;
  52. }
  53. if (is_wp_error($text)) {
  54. /* @var $text WP_Error */
  55. $text = $text->get_error_message() . ' (' . $text->get_error_code() . ') - ' . print_r($text->get_error_data(), true);
  56. } else {
  57. if (is_array($text) || is_object($text)) $text = print_r($text, true);
  58. }
  59. // The "logs" dir is created on Newsletter constructor.
  60. $res = @file_put_contents($this->file, $time . ' - m: ' . size_format(memory_get_usage(), 1) . ', u: ' . $user_id . ' - ' . $text . "\n", FILE_APPEND | FILE_TEXT);
  61. if ($res === false) {
  62. $this->level = self::NONE;
  63. }
  64. }
  65. function error($text) {
  66. self::log($text, self::ERROR);
  67. }
  68. function info($text) {
  69. $this->log($text, self::INFO);
  70. }
  71. function fatal($text) {
  72. $this->log($text, self::FATAL);
  73. }
  74. function debug($text) {
  75. $this->log($text, self::DEBUG);
  76. }
  77. }