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

Merge branch 'feature/stop-logs' into 'master'

Feature/stop logs

See merge request !4
parents cc9625a7 f2af44d2
No related branches found
No related tags found
1 merge request!4Feature/stop logs
Pipeline #6021 passed
<?php
namespace WPDesk\Logger\Filter;
use Monolog\Handler\AbstractHandler;
use Monolog\Logger;
/**
* Can disable or enable logging for logger
*
* @package WPDesk\Logger
*/
class BooleanFilter extends AbstractHandler
{
/** @var bool */
private $disable = false;
/**
* BooleanFilter constructor.
* @param bool $disable
*/
public function __construct($disable = false)
{
parent::__construct(Logger::DEBUG, !$disable);
$this->setDisable($disable);
}
/**
* @param bool $bool
*/
public function setDisable($bool) {
$this->disable = $bool;
$this->bubble = !$bool;
}
public function handle(array $record)
{
return $this->disable;
}
public function isHandling(array $record)
{
return false;
}
}
\ No newline at end of file
...@@ -16,7 +16,7 @@ class LoggerFacade ...@@ -16,7 +16,7 @@ class LoggerFacade
{ {
const BACKTRACE_FILENAME_KEY = 'file'; const BACKTRACE_FILENAME_KEY = 'file';
/** @var LoggerFactory */ /** @var WPDeskLoggerFactory */
private static $factory; private static $factory;
/** /**
...@@ -40,6 +40,18 @@ class LoggerFacade ...@@ -40,6 +40,18 @@ class LoggerFacade
return self::getLogger(); return self::getLogger();
} }
/**
* If set, logs are disabled
*
* @param bool $flag
*
*/
public static function set_disable_log($flag) {
self::getLogger();
self::$factory->setDisableLog($flag);
}
/** /**
* Log this exception into WPDesk logger * Log this exception into WPDesk logger
* *
...@@ -98,6 +110,7 @@ class LoggerFacade ...@@ -98,6 +110,7 @@ class LoggerFacade
* *
* @param string $message Message to log. * @param string $message Message to log.
* @param array $backtrace Backtrace information with snapshot of error env. * @param array $backtrace Backtrace information with snapshot of error env.
* @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)
......
...@@ -2,11 +2,13 @@ ...@@ -2,11 +2,13 @@
namespace WPDesk\Logger; namespace WPDesk\Logger;
use Monolog\Handler\AbstractHandler;
use Monolog\Logger; use Monolog\Logger;
use Monolog\Registry; use Monolog\Registry;
use Monolog\ErrorHandler; use Monolog\ErrorHandler;
use Monolog\Handler\StreamHandler; use Monolog\Handler\StreamHandler;
use Psr\Log\LogLevel; use Psr\Log\LogLevel;
use WPDesk\Logger\Filter\BooleanFilter;
use WPDesk\Logger\WC\WooCommerceCapture; use WPDesk\Logger\WC\WooCommerceCapture;
/** /**
...@@ -24,17 +26,16 @@ class WPDeskLoggerFactory extends BasicLoggerFactory ...@@ -24,17 +26,16 @@ class WPDeskLoggerFactory extends BasicLoggerFactory
/** @var string Log to wc logger when level is */ /** @var string Log to wc logger when level is */
const LEVEL_WC = LogLevel::ERROR; const LEVEL_WC = LogLevel::ERROR;
/** @var bool */
private static $isWpdeskLogWorking = false;
/** /**
* Remove static instances. In general should be use only testing purposes. * Remove static instances. In general should be use only testing purposes.
*
* @param string $name Name of the logger
*/ */
public static function tearDown() { public static function tearDown($name = self::WPDESK_LOGGER_CHANNEL_NAME)
if (Registry::hasLogger(self::WPDESK_LOGGER_CHANNEL_NAME)) { {
Registry::removeLogger(self::WPDESK_LOGGER_CHANNEL_NAME); if (Registry::hasLogger($name)) {
Registry::removeLogger($name);
} }
self::$isWpdeskLogWorking = false;
} }
/** /**
...@@ -50,43 +51,66 @@ class WPDeskLoggerFactory extends BasicLoggerFactory ...@@ -50,43 +51,66 @@ class WPDeskLoggerFactory extends BasicLoggerFactory
* - logs are still correctly written to WooCommerce subsystem in a transparent way; * - logs are still correctly written to WooCommerce subsystem in a transparent way;
* - all recorded errors are written to WPDesk file. * - all recorded errors are written to WPDesk file.
* *
* @param string $name Name of the logger
* @return Logger * @return Logger
*/ */
public function createWPDeskLogger() public function createWPDeskLogger($name = self::WPDESK_LOGGER_CHANNEL_NAME)
{ {
if (Registry::hasLogger(self::WPDESK_LOGGER_CHANNEL_NAME)) { if (Registry::hasLogger($name)) {
return Registry::getInstance(self::WPDESK_LOGGER_CHANNEL_NAME); return Registry::getInstance($name);
} }
$logger = $this->createLogger(self::WPDESK_LOGGER_CHANNEL_NAME); $logger = $this->createLogger($name);
if ($this->shouldInitializeLoggerHandles()) { $logger->pushHandler(new BooleanFilter());
$this->captureWooCommerce($logger); $this->captureWooCommerce($logger);
$this->captureWordPressHandle($logger); $this->captureWordPressHandle($logger);
try { try {
$this->appendWPDeskHandle($logger); $this->appendWPDeskHandle($logger);
$logger->debug('WPDesk handle is active'); $logger->debug('WPDesk handle is active');
self::$isWpdeskLogWorking = true;
} catch (\InvalidArgumentException $e) { } catch (\InvalidArgumentException $e) {
$logger->emergency('WPDesk log could not be created - invalid filename.'); $logger->emergency('WPDesk log could not be created - invalid filename.');
} catch (\Exception $e) { } catch (\Exception $e) {
$logger->emergency('WPDesk log could not be written.'); $logger->emergency('WPDesk log could not be written.');
} }
}
return $logger; return $logger;
} }
/** /**
* According to WPDesk - use logger only when debug mode is enabled. * If set, logs are disabled
* *
* @return bool * @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 shouldInitializeLoggerHandles() private function findHandlerByClass(Logger $logger, $class)
{ {
if (function_exists('get_option')) { foreach ($logger->getHandlers() as $handle) {
$options = get_option('wpdesk_helper_options'); /** @var AbstractHandler $handle */
return is_array($options) && isset($options['debug_log']) && $options['debug_log'] === '1'; if (is_a($handle, $class)) {
return $handle;
}
} }
return false; return null;
} }
/** /**
...@@ -149,6 +173,6 @@ class WPDeskLoggerFactory extends BasicLoggerFactory ...@@ -149,6 +173,6 @@ class WPDeskLoggerFactory extends BasicLoggerFactory
*/ */
public function isWPDeskLogWorking() public function isWPDeskLogWorking()
{ {
return self::$isWpdeskLogWorking; return Registry::hasLogger(self::WPDESK_LOGGER_CHANNEL_NAME);
} }
} }
...@@ -8,22 +8,6 @@ use WPDesk\Logger\WPDeskLoggerFactory; ...@@ -8,22 +8,6 @@ use WPDesk\Logger\WPDeskLoggerFactory;
class TestWPDeskLoggerFactory extends WP_UnitTestCase class TestWPDeskLoggerFactory extends WP_UnitTestCase
{ {
public function setUp()
{
parent::setUp();
$this->setWordpressOptionsForWPDeskLoggerToWork();
}
/**
* @return void
*/
private function setWordpressOptionsForWPDeskLoggerToWork()
{
update_option('wpdesk_helper_options', [
'debug_log' => '1'
]);
}
public function tearDown() public function tearDown()
{ {
parent::tearDown(); parent::tearDown();
...@@ -137,5 +121,21 @@ class TestWPDeskLoggerFactory extends WP_UnitTestCase ...@@ -137,5 +121,21 @@ class TestWPDeskLoggerFactory extends WP_UnitTestCase
$logger->debug($someMessage); $logger->debug($someMessage);
} }
public function testDisable() {
$factory = new WPDeskLoggerFactory();
$logger = $factory->createWPDeskLogger();
$factory->setDisableLog(true);
$listenHandle = $this->createMock(AbstractHandler::class);
$listenHandle
->expects($this->never())
->method('handle');
$logger->pushHandler($listenHandle);
$logger->debug('whatever');
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment