Select Git revision
AbstractPlugin.php
SimpleLoggerFactory.php 1.60 KiB
<?php
declare( strict_types=1 );
namespace WPDesk\Logger;
use Monolog\Handler\HandlerInterface;
use Monolog\Logger;
use Monolog\Handler\ErrorLogHandler;
use Monolog\Processor\PsrLogMessageProcessor;
use Monolog\Processor\UidProcessor;
use WPDesk\Logger\WC\WooCommerceHandler;
final class SimpleLoggerFactory implements LoggerFactory {
/** @var Settings */
private $options;
/** @var string */
private $channel;
/** @var Logger */
private $logger;
public function __construct( string $channel, Settings $options = null ) {
$this->channel = $channel;
$this->options = $options ?? new Settings();
}
public function getLogger( $name = null ): Logger {
if ( $this->logger ) {
return $this->logger;
}
$this->logger = new Logger(
$this->channel,
[],
[ new PsrLogMessageProcessor( null, true ), new UidProcessor() ],
wp_timezone()
);
if ( \function_exists( 'wc_get_logger' ) && \did_action( 'woocommerce_init' ) ) {
$this->create_wc_handler();
} else {
\add_action( 'woocommerce_init', [ $this, 'create_wc_handler' ] );
}
// Adding WooCommerce logger may have failed, if so add WP by default.
if ( empty( $this->logger->getHandlers() ) ) {
$this->logger->pushHandler( $this->get_wp_handler() );
}
return $this->logger;
}
/**
* @internal
*/
public function set_wc_handler(): void {
$this->set_handler(
$this->logger,
new WooCommerceHandler( \wc_get_logger(), $this->channel )
);
}
private function set_handler( Logger $logger, HandlerInterface $handler ): void {
// Purposefully replace all existing handlers.
$logger->setHandlers( [ $handler ] );
}
}