Skip to content
Snippets Groups Projects
Commit 7dde404d authored by dyszczo's avatar dyszczo
Browse files

can disable logger

parent a68efa61
No related branches found
No related tags found
1 merge request!4Feature/stop logs
Pipeline #5995 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
{
const BACKTRACE_FILENAME_KEY = 'file';
/** @var LoggerFactory */
/** @var WPDeskLoggerFactory */
private static $factory;
/**
......@@ -40,6 +40,18 @@ class LoggerFacade
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
*
......@@ -98,6 +110,7 @@ class LoggerFacade
*
* @param string $message Message to log.
* @param array $backtrace Backtrace information with snapshot of error env.
* @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)
......
......@@ -2,11 +2,13 @@
namespace WPDesk\Logger;
use Monolog\Handler\AbstractHandler;
use Monolog\Logger;
use Monolog\Registry;
use Monolog\ErrorHandler;
use Monolog\Handler\StreamHandler;
use Psr\Log\LogLevel;
use WPDesk\Logger\Filter\BooleanFilter;
use WPDesk\Logger\WC\WooCommerceCapture;
/**
......@@ -24,17 +26,16 @@ class WPDeskLoggerFactory extends BasicLoggerFactory
/** @var string Log to wc logger when level is */
const LEVEL_WC = LogLevel::ERROR;
/** @var bool */
private static $isWpdeskLogWorking = false;
/**
* Remove static instances. In general should be use only testing purposes.
*
* @param string $name Name of the logger
*/
public static function tearDown() {
if (Registry::hasLogger(self::WPDESK_LOGGER_CHANNEL_NAME)) {
Registry::removeLogger(self::WPDESK_LOGGER_CHANNEL_NAME);
public static function tearDown($name = self::WPDESK_LOGGER_CHANNEL_NAME)
{
if (Registry::hasLogger($name)) {
Registry::removeLogger($name);
}
self::$isWpdeskLogWorking = false;
}
/**
......@@ -50,43 +51,66 @@ class WPDeskLoggerFactory extends BasicLoggerFactory
* - logs are still correctly written to WooCommerce subsystem in a transparent way;
* - all recorded errors are written to WPDesk file.
*
* @param string $name Name of the logger
* @return Logger
*/
public function createWPDeskLogger()
public function createWPDeskLogger($name = self::WPDESK_LOGGER_CHANNEL_NAME)
{
if (Registry::hasLogger(self::WPDESK_LOGGER_CHANNEL_NAME)) {
return Registry::getInstance(self::WPDESK_LOGGER_CHANNEL_NAME);
if (Registry::hasLogger($name)) {
return Registry::getInstance($name);
}
$logger = $this->createLogger(self::WPDESK_LOGGER_CHANNEL_NAME);
if ($this->shouldInitializeLoggerHandles()) {
$logger = $this->createLogger($name);
$logger->pushHandler(new BooleanFilter());
$this->captureWooCommerce($logger);
$this->captureWordPressHandle($logger);
try {
$this->appendWPDeskHandle($logger);
$logger->debug('WPDesk handle is active');
self::$isWpdeskLogWorking = true;
} catch (\InvalidArgumentException $e) {
$logger->emergency('WPDesk log could not be created - invalid filename.');
} catch (\Exception $e) {
$logger->emergency('WPDesk log could not be written.');
}
}
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')) {
$options = get_option('wpdesk_helper_options');
return is_array($options) && isset($options['debug_log']) && $options['debug_log'] === '1';
foreach ($logger->getHandlers() as $handle) {
/** @var AbstractHandler $handle */
if (is_a($handle, $class)) {
return $handle;
}
}
return false;
return null;
}
/**
......@@ -149,6 +173,6 @@ class WPDeskLoggerFactory extends BasicLoggerFactory
*/
public function isWPDeskLogWorking()
{
return self::$isWpdeskLogWorking;
return Registry::hasLogger(self::WPDESK_LOGGER_CHANNEL_NAME);
}
}
......@@ -137,5 +137,21 @@ class TestWPDeskLoggerFactory extends WP_UnitTestCase
$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