diff --git a/CHANGELOG.md b/CHANGELOG.md index 21e26b1fcc514d18bd3901e76f55008fe72c4157..c10236d2073ca8fa8ba06ca077f58d10e4730eb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +[1.2.0] - 2018-10-29 +## +### Changed +- getWPDeskFileName renamed to getFileName +- isWPDeskLogWorking renamed to isLogWorking +### Added +- most methods have $name parameter for using specific logger + ## [1.1.1] - 2018-10-29 ### Fixed - should not capture all error - only log them diff --git a/src/BasicLoggerFactory.php b/src/BasicLoggerFactory.php index e9d1dd3ef2102cd36a8f69a6780ff6fc09dcac70..2f7ac82475d36d7a28a7b7c41c2f2141456282c9 100644 --- a/src/BasicLoggerFactory.php +++ b/src/BasicLoggerFactory.php @@ -19,19 +19,19 @@ class BasicLoggerFactory implements LoggerFactory /** * Creates logger for plugin * - * @param string $channel The logging channel + * @param string $name The logging channel/name of logger * @param HandlerInterface[] $handlers Optional stack of handlers, the first one in the array is called first, etc. * @param callable[] $processors Optional array of processors * @return Logger */ - public function createLogger($channel, $handlers = array(), array $processors = array()) + public function createLogger($name, $handlers = array(), array $processors = array()) { - if (Registry::hasLogger($channel)) { - return Registry::getInstance($channel); + if (Registry::hasLogger($name)) { + return Registry::getInstance($name); } - self::$lastLoggerChannel = $channel; + self::$lastLoggerChannel = $name; - $logger = new Logger($channel, $handlers, $processors); + $logger = new Logger($name, $handlers, $processors); Registry::addLogger($logger); @@ -39,12 +39,17 @@ class BasicLoggerFactory implements LoggerFactory } /** - * Returns created Logger + * Returns created Logger by name or last created logger + * + * @param string $name Name of the logger * * @return Logger */ - public function getLogger() + public function getLogger($name = null) { - return Registry::getInstance(self::$lastLoggerChannel); + if ($name === null) { + $name = self::$lastLoggerChannel; + } + return Registry::getInstance($name); } } diff --git a/src/LoggerFacade.php b/src/LoggerFacade.php index 7b16e0f415d85aa8fdf17b32e6ec0d54857bfd2d..6cf9239883cd8ecb8f57db30f66c07059fae44cb 100644 --- a/src/LoggerFacade.php +++ b/src/LoggerFacade.php @@ -20,34 +20,40 @@ class LoggerFacade private static $factory; /** + * Get logger by name. If not exists create one. + * + * @param string $name Name of the logger * @return Logger */ - public static function getLogger() + public static function getLogger($name = WPDeskLoggerFactory::DEFAULT_LOGGER_CHANNEL_NAME) { if (self::$factory === null) { self::$factory = new WPDeskLoggerFactory(); } - return self::$factory->createWPDeskLogger(); + return self::$factory->createWPDeskLogger($name); } /** * Snake case alias for getLogger * + * @param string $name + * * @return Logger */ - public static function get_logger() + public static function get_logger($name = WPDeskLoggerFactory::DEFAULT_LOGGER_CHANNEL_NAME) { - return self::getLogger(); + return self::getLogger($name); } /** * If set, logs are disabled * * @param bool $flag - * + * @param string $name Name of the logger */ - public static function set_disable_log($flag) { - self::getLogger(); + public static function set_disable_log($flag, $name = WPDeskLoggerFactory::DEFAULT_LOGGER_CHANNEL_NAME) + { + self::getLogger($name); self::$factory->setDisableLog($flag); } @@ -62,8 +68,12 @@ class LoggerFacade * * @see http://php.net/manual/en/function.debug-backtrace.php */ - public static function log_wp_error(WP_Error $e, array $backtrace, array $context = array(), $level = LogLevel::ERROR) - { + public static function log_wp_error( + WP_Error $e, + array $backtrace, + array $context = array(), + $level = LogLevel::ERROR + ) { $message = 'Error: ' . get_class($e) . ' Code: ' . $e->get_error_code() . ' Message: ' . $e->get_error_message(); self::log_message_backtrace($message, $backtrace, $context, $level); @@ -113,8 +123,12 @@ class LoggerFacade * @param array $context Context to log * @param string $level Level of error. */ - public static function log_message_backtrace($message, array $backtrace, array $context = array(), $level = LogLevel::DEBUG) - { + public static function log_message_backtrace( + $message, + array $backtrace, + array $context = array(), + $level = LogLevel::DEBUG + ) { $message .= ' Backtrace: ' . json_encode($backtrace); $source = null; diff --git a/src/LoggerFactory.php b/src/LoggerFactory.php index 653099085080f98df6ac49fd424d39945442e5f9..0df8b9acb9dc29bd4c2982d38331c92aeb6aa744 100644 --- a/src/LoggerFactory.php +++ b/src/LoggerFactory.php @@ -12,7 +12,9 @@ interface LoggerFactory /** * Returns created Logger * + * @param string $name + * * @return Logger */ - public function getLogger(); + public function getLogger($name); } diff --git a/src/WPDeskLoggerFactory.php b/src/WPDeskLoggerFactory.php index 86588114d18bc4281d0c9303c26467600368a3be..0d4295e87f583dff4f213f5cc27389136a11be30 100644 --- a/src/WPDeskLoggerFactory.php +++ b/src/WPDeskLoggerFactory.php @@ -18,7 +18,7 @@ use WPDesk\Logger\WC\WooCommerceCapture; */ class WPDeskLoggerFactory extends BasicLoggerFactory { - const WPDESK_LOGGER_CHANNEL_NAME = 'wpdesk'; + const DEFAULT_LOGGER_CHANNEL_NAME = 'wpdesk'; /** @var string Log to file when level is */ const LEVEL_WPDESK_FILE = LogLevel::DEBUG; @@ -31,13 +31,32 @@ class WPDeskLoggerFactory extends BasicLoggerFactory * * @param string $name Name of the logger */ - public static function tearDown($name = self::WPDESK_LOGGER_CHANNEL_NAME) + public static function tearDown($name = self::DEFAULT_LOGGER_CHANNEL_NAME) { if (Registry::hasLogger($name)) { Registry::removeLogger($name); } } + /** + * If set, logs are disabled + * + * @param bool $flag should be disabled? + * @param string $name Name of the logger + */ + public function setDisableLog($flag, $name = self::DEFAULT_LOGGER_CHANNEL_NAME) + { + if (!Registry::hasLogger($name)) { + $this->createWPDeskLogger($name); + } + /** @var Logger $logger */ + $logger = Registry::getInstance($name); + + /** @var BooleanFilter $filter */ + $filter = $this->findHandlerByClass($logger, BooleanFilter::class); + $filter->setDisable($flag); + } + /** * Creates default WPDesk logger. * @@ -54,64 +73,26 @@ class WPDeskLoggerFactory extends BasicLoggerFactory * @param string $name Name of the logger * @return Logger */ - public function createWPDeskLogger($name = self::WPDESK_LOGGER_CHANNEL_NAME) + public function createWPDeskLogger($name = self::DEFAULT_LOGGER_CHANNEL_NAME) { if (Registry::hasLogger($name)) { return Registry::getInstance($name); } $logger = $this->createLogger($name); $this->captureWooCommerce($logger); - $this->captureWordPressHandle($logger); + $this->captureErrorHandle($logger); try { - $this->appendWPDeskHandle($logger); + $this->pushFileHandle($name, $logger); } catch (\InvalidArgumentException $e) { - $logger->emergency('WPDesk log could not be created - invalid filename.'); + $logger->emergency('File log could not be created - invalid filename.'); } catch (\Exception $e) { - $logger->emergency('WPDesk log could not be written.'); + $logger->emergency('File log could not be written.'); } $logger->pushHandler(new BooleanFilter()); return $logger; } - /** - * If set, logs are disabled - * - * @param bool $flag should be disabled? - * @param string $name Name of the logger - */ - public function setDisableLog($flag, $name = self::WPDESK_LOGGER_CHANNEL_NAME) - { - if (!Registry::hasLogger($name)) { - $this->createWPDeskLogger($name); - } - /** @var Logger $logger */ - $logger = Registry::getInstance($name); - - /** @var BooleanFilter $filter */ - $filter = $this->findHandlerByClass($logger, BooleanFilter::class); - $filter->setDisable($flag); - } - - /** - * Find handler in logger - * - * @param Logger $logger - * @param string $class Class handle to find - * - * @return AbstractHandler If this is null then fatal failure is ok - */ - private function findHandlerByClass(Logger $logger, $class) - { - foreach ($logger->getHandlers() as $handle) { - /** @var AbstractHandler $handle */ - if (is_a($handle, $class)) { - return $handle; - } - } - return null; - } - /** * Capture WooCommerce and add handle * @@ -132,7 +113,7 @@ class WPDeskLoggerFactory extends BasicLoggerFactory * * @param Logger $logger */ - private function captureWordPressHandle(Logger $logger) + private function captureErrorHandle(Logger $logger) { $errorHandler = new ErrorHandler($logger); $errorHandler->registerErrorHandler(); @@ -142,33 +123,65 @@ class WPDeskLoggerFactory extends BasicLoggerFactory * Add WPDesk log file handle * * @param Logger $logger + * @param string $name Name of the logger * * @throws \Exception If a missing directory is not buildable * @throws \InvalidArgumentException If stream is not a resource or string */ - private function appendWPDeskHandle(Logger $logger) + private function pushFileHandle($name, Logger $logger) { - $filename = $this->getWPDeskFileName(); + $filename = $this->getFileName($name); $logger->pushHandler(new StreamHandler($filename, self::LEVEL_WPDESK_FILE)); } + /** + * Get filename old way + * + * @deprecated + */ + public function getWPDeskFileName() { + return $this->getFileName(); + } + /** * Returns WPDesk filename with path. * + * @param string $name Name of the logger + * * @return string */ - public function getWPDeskFileName() + public function getFileName($name = self::DEFAULT_LOGGER_CHANNEL_NAME) { - return WP_CONTENT_DIR . '/uploads/wpdesk-logs/wpdesk_debug.log'; + return WP_CONTENT_DIR . '/uploads/logs/' . $name . '_debug.log'; + } + + /** + * Find handler in logger + * + * @param Logger $logger + * @param string $class Class handle to find + * + * @return AbstractHandler If this is null then fatal failure is ok + */ + private function findHandlerByClass(Logger $logger, $class) + { + foreach ($logger->getHandlers() as $handle) { + /** @var AbstractHandler $handle */ + if (is_a($handle, $class)) { + return $handle; + } + } + return null; } /** * is WPDesk file log is working(writable, exists, connected). + * @param string $name Name of the logger * * @return bool */ - public function isWPDeskLogWorking() + public function isLogWorking($name = self::DEFAULT_LOGGER_CHANNEL_NAME) { - return Registry::hasLogger(self::WPDESK_LOGGER_CHANNEL_NAME); + return Registry::hasLogger($name); } } diff --git a/tests/integration/TestWPDeskLoggerFactory.php b/tests/integration/TestWPDeskLoggerFactory.php index 1af86db9f7a2cd47c791d98101a0c64e67236776..0131d6bf93b250a1cb87245e66a041ebd101fc52 100644 --- a/tests/integration/TestWPDeskLoggerFactory.php +++ b/tests/integration/TestWPDeskLoggerFactory.php @@ -18,7 +18,7 @@ class TestWPDeskLoggerFactory extends WP_UnitTestCase { $factory = new WPDeskLoggerFactory(); $this->assertInstanceOf(Logger::class, $factory->createWPDeskLogger(), "Logger should be created"); - $this->assertTrue($factory->isWPDeskLogWorking()); + $this->assertTrue($factory->isLogWorking()); } public function testWCIsNotCorruptedByOtherTests() @@ -94,7 +94,7 @@ class TestWPDeskLoggerFactory extends WP_UnitTestCase $someMessage = 'whatever'; $factory = new WPDeskLoggerFactory(); - $logFilename = $factory->getWPDeskFileName(); + $logFilename = $factory->getFileName(); unlink($logFilename); $this->assertFileNotExists($logFilename);