Skip to content
Snippets Groups Projects
Commit 24fbd9e3 authored by Dyszczo's avatar Dyszczo
Browse files

Merge branch 'feature/specific-logger' into 'master'

Feature/specific logger

See merge request !6
parents 3777ba58 f2c62d74
No related branches found
No related tags found
1 merge request!6Feature/specific logger
Pipeline #6157 passed
[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 ## [1.1.1] - 2018-10-29
### Fixed ### Fixed
- should not capture all error - only log them - should not capture all error - only log them
......
...@@ -19,19 +19,19 @@ class BasicLoggerFactory implements LoggerFactory ...@@ -19,19 +19,19 @@ class BasicLoggerFactory implements LoggerFactory
/** /**
* Creates logger for plugin * 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 HandlerInterface[] $handlers Optional stack of handlers, the first one in the array is called first, etc.
* @param callable[] $processors Optional array of processors * @param callable[] $processors Optional array of processors
* @return Logger * @return Logger
*/ */
public function createLogger($channel, $handlers = array(), array $processors = array()) public function createLogger($name, $handlers = array(), array $processors = array())
{ {
if (Registry::hasLogger($channel)) { if (Registry::hasLogger($name)) {
return Registry::getInstance($channel); 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); Registry::addLogger($logger);
...@@ -39,12 +39,17 @@ class BasicLoggerFactory implements LoggerFactory ...@@ -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 * @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);
} }
} }
...@@ -20,34 +20,40 @@ class LoggerFacade ...@@ -20,34 +20,40 @@ class LoggerFacade
private static $factory; private static $factory;
/** /**
* Get logger by name. If not exists create one.
*
* @param string $name Name of the logger
* @return Logger * @return Logger
*/ */
public static function getLogger() public static function getLogger($name = WPDeskLoggerFactory::DEFAULT_LOGGER_CHANNEL_NAME)
{ {
if (self::$factory === null) { if (self::$factory === null) {
self::$factory = new WPDeskLoggerFactory(); self::$factory = new WPDeskLoggerFactory();
} }
return self::$factory->createWPDeskLogger(); return self::$factory->createWPDeskLogger($name);
} }
/** /**
* Snake case alias for getLogger * Snake case alias for getLogger
* *
* @param string $name
*
* @return Logger * @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 * If set, logs are disabled
* *
* @param bool $flag * @param bool $flag
* * @param string $name Name of the logger
*/ */
public static function set_disable_log($flag) { public static function set_disable_log($flag, $name = WPDeskLoggerFactory::DEFAULT_LOGGER_CHANNEL_NAME)
self::getLogger(); {
self::getLogger($name);
self::$factory->setDisableLog($flag); self::$factory->setDisableLog($flag);
} }
...@@ -62,8 +68,12 @@ class LoggerFacade ...@@ -62,8 +68,12 @@ class LoggerFacade
* *
* @see http://php.net/manual/en/function.debug-backtrace.php * @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(); $message = 'Error: ' . get_class($e) . ' Code: ' . $e->get_error_code() . ' Message: ' . $e->get_error_message();
self::log_message_backtrace($message, $backtrace, $context, $level); self::log_message_backtrace($message, $backtrace, $context, $level);
...@@ -113,8 +123,12 @@ class LoggerFacade ...@@ -113,8 +123,12 @@ class LoggerFacade
* @param array $context Context to log * @param array $context Context to log
* @param string $level Level of error. * @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); $message .= ' Backtrace: ' . json_encode($backtrace);
$source = null; $source = null;
......
...@@ -12,7 +12,9 @@ interface LoggerFactory ...@@ -12,7 +12,9 @@ interface LoggerFactory
/** /**
* Returns created Logger * Returns created Logger
* *
* @param string $name
*
* @return Logger * @return Logger
*/ */
public function getLogger(); public function getLogger($name);
} }
...@@ -18,7 +18,7 @@ use WPDesk\Logger\WC\WooCommerceCapture; ...@@ -18,7 +18,7 @@ use WPDesk\Logger\WC\WooCommerceCapture;
*/ */
class WPDeskLoggerFactory extends BasicLoggerFactory class WPDeskLoggerFactory extends BasicLoggerFactory
{ {
const WPDESK_LOGGER_CHANNEL_NAME = 'wpdesk'; const DEFAULT_LOGGER_CHANNEL_NAME = 'wpdesk';
/** @var string Log to file when level is */ /** @var string Log to file when level is */
const LEVEL_WPDESK_FILE = LogLevel::DEBUG; const LEVEL_WPDESK_FILE = LogLevel::DEBUG;
...@@ -31,13 +31,32 @@ class WPDeskLoggerFactory extends BasicLoggerFactory ...@@ -31,13 +31,32 @@ class WPDeskLoggerFactory extends BasicLoggerFactory
* *
* @param string $name Name of the logger * @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)) { if (Registry::hasLogger($name)) {
Registry::removeLogger($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. * Creates default WPDesk logger.
* *
...@@ -54,64 +73,26 @@ class WPDeskLoggerFactory extends BasicLoggerFactory ...@@ -54,64 +73,26 @@ class WPDeskLoggerFactory extends BasicLoggerFactory
* @param string $name Name of the logger * @param string $name Name of the logger
* @return 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)) { if (Registry::hasLogger($name)) {
return Registry::getInstance($name); return Registry::getInstance($name);
} }
$logger = $this->createLogger($name); $logger = $this->createLogger($name);
$this->captureWooCommerce($logger); $this->captureWooCommerce($logger);
$this->captureWordPressHandle($logger); $this->captureErrorHandle($logger);
try { try {
$this->appendWPDeskHandle($logger); $this->pushFileHandle($name, $logger);
} catch (\InvalidArgumentException $e) { } 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) { } catch (\Exception $e) {
$logger->emergency('WPDesk log could not be written.'); $logger->emergency('File log could not be written.');
} }
$logger->pushHandler(new BooleanFilter()); $logger->pushHandler(new BooleanFilter());
return $logger; 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 * Capture WooCommerce and add handle
* *
...@@ -132,7 +113,7 @@ class WPDeskLoggerFactory extends BasicLoggerFactory ...@@ -132,7 +113,7 @@ class WPDeskLoggerFactory extends BasicLoggerFactory
* *
* @param Logger $logger * @param Logger $logger
*/ */
private function captureWordPressHandle(Logger $logger) private function captureErrorHandle(Logger $logger)
{ {
$errorHandler = new ErrorHandler($logger); $errorHandler = new ErrorHandler($logger);
$errorHandler->registerErrorHandler(); $errorHandler->registerErrorHandler();
...@@ -142,33 +123,65 @@ class WPDeskLoggerFactory extends BasicLoggerFactory ...@@ -142,33 +123,65 @@ class WPDeskLoggerFactory extends BasicLoggerFactory
* Add WPDesk log file handle * Add WPDesk log file handle
* *
* @param Logger $logger * @param Logger $logger
* @param string $name Name of the logger
* *
* @throws \Exception If a missing directory is not buildable * @throws \Exception If a missing directory is not buildable
* @throws \InvalidArgumentException If stream is not a resource or string * @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)); $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. * Returns WPDesk filename with path.
* *
* @param string $name Name of the logger
*
* @return string * @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). * is WPDesk file log is working(writable, exists, connected).
* @param string $name Name of the logger
* *
* @return bool * @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);
} }
} }
...@@ -18,7 +18,7 @@ class TestWPDeskLoggerFactory extends WP_UnitTestCase ...@@ -18,7 +18,7 @@ class TestWPDeskLoggerFactory extends WP_UnitTestCase
{ {
$factory = new WPDeskLoggerFactory(); $factory = new WPDeskLoggerFactory();
$this->assertInstanceOf(Logger::class, $factory->createWPDeskLogger(), "Logger should be created"); $this->assertInstanceOf(Logger::class, $factory->createWPDeskLogger(), "Logger should be created");
$this->assertTrue($factory->isWPDeskLogWorking()); $this->assertTrue($factory->isLogWorking());
} }
public function testWCIsNotCorruptedByOtherTests() public function testWCIsNotCorruptedByOtherTests()
...@@ -94,7 +94,7 @@ class TestWPDeskLoggerFactory extends WP_UnitTestCase ...@@ -94,7 +94,7 @@ class TestWPDeskLoggerFactory extends WP_UnitTestCase
$someMessage = 'whatever'; $someMessage = 'whatever';
$factory = new WPDeskLoggerFactory(); $factory = new WPDeskLoggerFactory();
$logFilename = $factory->getWPDeskFileName(); $logFilename = $factory->getFileName();
unlink($logFilename); unlink($logFilename);
$this->assertFileNotExists($logFilename); $this->assertFileNotExists($logFilename);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment